Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # HG changeset patch
- # User hongzhidao <hongzhidao@gmail.com>
- # Date 1555088854 -28800
- # Node ID 366a094ef6b2f856456be6c6ca50daed259711b1
- # Parent d7a0eb59a7e748558bdcb0b8fa05a6a466df41b6
- Making njs_parser_node_t more generic.
- diff -r d7a0eb59a7e7 -r 366a094ef6b2 njs/njs_generator.c
- --- a/njs/njs_generator.c Sun Apr 07 14:26:13 2019 +0800
- +++ b/njs/njs_generator.c Sat Apr 13 01:07:34 2019 +0800
- @@ -847,7 +847,7 @@ njs_generate_switch_statement(njs_vm_t *
- }
- ret = njs_generate_start_block(vm, generator, NJS_GENERATOR_SWITCH,
- - &swtch->label);
- + &swtch->name);
- if (nxt_slow_path(ret != NXT_OK)) {
- return ret;
- }
- @@ -966,7 +966,7 @@ njs_generate_while_statement(njs_vm_t *v
- /* The loop body. */
- ret = njs_generate_start_block(vm, generator, NJS_GENERATOR_LOOP,
- - &node->label);
- + &node->name);
- if (nxt_slow_path(ret != NXT_OK)) {
- return ret;
- }
- @@ -1014,7 +1014,7 @@ njs_generate_do_while_statement(njs_vm_t
- /* The loop body. */
- ret = njs_generate_start_block(vm, generator, NJS_GENERATOR_LOOP,
- - &node->label);
- + &node->name);
- if (nxt_slow_path(ret != NXT_OK)) {
- return ret;
- }
- @@ -1059,7 +1059,7 @@ njs_generate_for_statement(njs_vm_t *vm,
- njs_vmcode_cond_jump_t *cond_jump;
- ret = njs_generate_start_block(vm, generator, NJS_GENERATOR_LOOP,
- - &node->label);
- + &node->name);
- if (nxt_slow_path(ret != NXT_OK)) {
- return ret;
- }
- @@ -1162,7 +1162,7 @@ njs_generate_for_in_statement(njs_vm_t *
- njs_vmcode_prop_foreach_t *prop_foreach;
- ret = njs_generate_start_block(vm, generator, NJS_GENERATOR_LOOP,
- - &node->label);
- + &node->name);
- if (nxt_slow_path(ret != NXT_OK)) {
- return ret;
- }
- @@ -1441,7 +1441,7 @@ njs_generate_continue_statement(njs_vm_t
- njs_generator_patch_t *patch;
- njs_generator_block_t *block;
- - label = &node->label;
- + label = &node->name;
- block = njs_generate_find_block(generator->block, NJS_GENERATOR_LOOP,
- label);
- @@ -1489,7 +1489,7 @@ njs_generate_break_statement(njs_vm_t *v
- njs_generator_patch_t *patch;
- njs_generator_block_t *block;
- - label = &node->label;
- + label = &node->name;
- block = njs_generate_find_block(generator->block, NJS_GENERATOR_ALL, label);
- if (nxt_slow_path(block == NULL)) {
- @@ -1548,7 +1548,7 @@ njs_generate_block_statement(njs_vm_t *v
- nxt_int_t ret;
- ret = njs_generate_start_block(vm, generator, NJS_GENERATOR_BLOCK,
- - &node->label);
- + &node->name);
- if (nxt_slow_path(ret != NXT_OK)) {
- return ret;
- }
- diff -r d7a0eb59a7e7 -r 366a094ef6b2 njs/njs_parser.c
- --- a/njs/njs_parser.c Sun Apr 07 14:26:13 2019 +0800
- +++ b/njs/njs_parser.c Sat Apr 13 01:07:34 2019 +0800
- @@ -559,7 +559,7 @@ njs_parser_labelled_statement(njs_vm_t *
- if (parser->node != NULL) {
- /* The statement is not empty block or just semicolon. */
- - ret = njs_name_copy(vm, &parser->node->label, &name);
- + ret = njs_name_copy(vm, &parser->node->name, &name);
- if (nxt_slow_path(ret != NXT_OK)) {
- return NJS_TOKEN_ERROR;
- }
- @@ -1584,7 +1584,7 @@ njs_parser_brk_statement(njs_vm_t *vm, n
- return NJS_TOKEN_ILLEGAL;
- }
- - ret = njs_name_copy(vm, &parser->node->label, &name);
- + ret = njs_name_copy(vm, &parser->node->name, &name);
- if (nxt_slow_path(ret != NXT_OK)) {
- return NJS_TOKEN_ERROR;
- }
- diff -r d7a0eb59a7e7 -r 366a094ef6b2 njs/njs_parser.h
- --- a/njs/njs_parser.h Sun Apr 07 14:26:13 2019 +0800
- +++ b/njs/njs_parser.h Sat Apr 13 01:07:34 2019 +0800
- @@ -50,7 +50,7 @@ struct njs_parser_node_s {
- njs_parser_node_t *object;
- } u;
- - nxt_str_t label;
- + nxt_str_t name;
- njs_index_t index;
- # HG changeset patch
- # User hongzhidao <hongzhidao@gmail.com>
- # Date 1555089109 -28800
- # Node ID 4f81c1cfc677c9f457c5fca5797034a35230623b
- # Parent 366a094ef6b2f856456be6c6ca50daed259711b1
- Making parser hoist more generic.
- diff -r 366a094ef6b2 -r 4f81c1cfc677 njs/njs_parser.c
- --- a/njs/njs_parser.c Sat Apr 13 01:07:34 2019 +0800
- +++ b/njs/njs_parser.c Sat Apr 13 01:11:49 2019 +0800
- @@ -13,7 +13,7 @@ static njs_ret_t njs_parser_scope_begin(
- njs_scope_t type);
- static void njs_parser_scope_end(njs_vm_t *vm, njs_parser_t *parser);
- static njs_token_t njs_parser_statement_chain(njs_vm_t *vm,
- - njs_parser_t *parser, njs_token_t token, njs_parser_node_t **dest);
- + njs_parser_t *parser, njs_token_t token, nxt_bool_t top);
- static njs_token_t njs_parser_statement(njs_vm_t *vm, njs_parser_t *parser,
- njs_token_t token);
- static njs_token_t njs_parser_block_statement(njs_vm_t *vm,
- @@ -61,8 +61,6 @@ static njs_token_t njs_parser_import_sta
- njs_parser_t *parser);
- static njs_token_t njs_parser_export_statement(njs_vm_t *vm,
- njs_parser_t *parser);
- -static nxt_int_t njs_parser_import_hoist(njs_vm_t *vm, njs_parser_t *parser,
- - njs_parser_node_t *new_node);
- static nxt_int_t njs_parser_export_sink(njs_vm_t *vm, njs_parser_t *parser);
- static njs_token_t njs_parser_grouping_expression(njs_vm_t *vm,
- njs_parser_t *parser);
- @@ -130,8 +128,7 @@ njs_parser(njs_vm_t *vm, njs_parser_t *p
- while (token != NJS_TOKEN_END) {
- - token = njs_parser_statement_chain(vm, parser, token,
- - &njs_parser_chain_top(parser));
- + token = njs_parser_statement_chain(vm, parser, token, 1);
- if (nxt_slow_path(token <= NJS_TOKEN_ILLEGAL)) {
- return NXT_ERROR;
- }
- @@ -271,35 +268,58 @@ njs_parser_scope_end(njs_vm_t *vm, njs_p
- static njs_token_t
- njs_parser_statement_chain(njs_vm_t *vm, njs_parser_t *parser,
- - njs_token_t token, njs_parser_node_t **dest)
- + njs_token_t token, nxt_bool_t top)
- {
- - njs_parser_node_t *node, *last;
- -
- - last = *dest;
- + njs_parser_node_t *stmt, *last, *node, *new_node, **child;
- +
- + child = top ? &njs_parser_chain_top(parser)
- + : &njs_parser_chain_current(parser);
- +
- + last = *child;
- token = njs_parser_statement(vm, parser, token);
- -
- if (nxt_slow_path(token <= NJS_TOKEN_ILLEGAL)) {
- return njs_parser_unexpected_token(vm, parser, token);
- }
- - if (parser->node != NULL) {
- - /* The statement is not empty block or just semicolon. */
- -
- - node = njs_parser_node_new(vm, parser, NJS_TOKEN_STATEMENT);
- - if (nxt_slow_path(node == NULL)) {
- - return NJS_TOKEN_ERROR;
- - }
- -
- - node->left = last;
- - node->right = parser->node;
- - *dest = node;
- -
- - while (token == NJS_TOKEN_SEMICOLON) {
- - token = njs_parser_token(vm, parser);
- - if (nxt_slow_path(token <= NJS_TOKEN_ILLEGAL)) {
- + if (parser->node == NULL) {
- + /* The statement is empty block or just semicolon. */
- + return token;
- + }
- +
- + new_node = parser->node;
- +
- + if (new_node->hoist) {
- + child = &njs_parser_chain_top(parser);
- +
- + while (*child != NULL) {
- + node = *child;
- +
- + if (node->hoist) {
- break;
- }
- +
- + child = &node->left;
- + }
- +
- + last = *child;
- + }
- +
- + stmt = njs_parser_node_new(vm, parser, NJS_TOKEN_STATEMENT);
- + if (nxt_slow_path(stmt == NULL)) {
- + return NJS_TOKEN_ERROR;
- + }
- +
- + stmt->hoist = new_node->hoist;
- + stmt->left = last;
- + stmt->right = new_node;
- +
- + *child = stmt;
- +
- + while (token == NJS_TOKEN_SEMICOLON) {
- + token = njs_parser_token(vm, parser);
- + if (nxt_slow_path(token <= NJS_TOKEN_ILLEGAL)) {
- + break;
- }
- }
- @@ -442,8 +462,7 @@ njs_parser_block_statement(njs_vm_t *vm,
- parser->node = NULL;
- while (token != NJS_TOKEN_CLOSE_BRACE) {
- - token = njs_parser_statement_chain(vm, parser, token,
- - &njs_parser_chain_current(parser));
- + token = njs_parser_statement_chain(vm, parser, token, 0);
- if (nxt_slow_path(token <= NJS_TOKEN_ILLEGAL)) {
- return token;
- }
- @@ -940,8 +959,7 @@ njs_parser_lambda_statements(njs_vm_t *v
- parser->node = NULL;
- while (token != NJS_TOKEN_CLOSE_BRACE) {
- - token = njs_parser_statement_chain(vm, parser, token,
- - &njs_parser_chain_top(parser));
- + token = njs_parser_statement_chain(vm, parser, token, 1);
- if (nxt_slow_path(token <= NJS_TOKEN_ILLEGAL)) {
- return token;
- }
- @@ -1253,8 +1271,7 @@ njs_parser_switch_statement(njs_vm_t *vm
- return NJS_TOKEN_ILLEGAL;
- }
- - token = njs_parser_statement_chain(vm, parser, token,
- - &njs_parser_chain_current(parser));
- + token = njs_parser_statement_chain(vm, parser, token, 0);
- if (nxt_slow_path(token <= NJS_TOKEN_ILLEGAL)) {
- return token;
- }
- @@ -1839,12 +1856,8 @@ njs_parser_import_statement(njs_vm_t *vm
- import->left = name;
- import->right = parser->node;
- - ret = njs_parser_import_hoist(vm, parser, import);
- - if (nxt_slow_path(ret != NXT_OK)) {
- - return NJS_TOKEN_ERROR;
- - }
- -
- - parser->node = NULL;
- + parser->node = import;
- + parser->node->hoist = 1;
- return njs_parser_token(vm, parser);
- }
- @@ -1961,40 +1974,6 @@ njs_parser_export_statement(njs_vm_t *vm
- static nxt_int_t
- -njs_parser_import_hoist(njs_vm_t *vm, njs_parser_t *parser,
- - njs_parser_node_t *new_node)
- -{
- - njs_parser_node_t *node, *stmt, **child;
- -
- - child = &njs_parser_chain_top(parser);
- -
- - while (*child != NULL) {
- - node = *child;
- -
- - if (node->right != NULL
- - && node->right->token == NJS_TOKEN_IMPORT)
- - {
- - break;
- - }
- -
- - child = &node->left;
- - }
- -
- - stmt = njs_parser_node_new(vm, parser, NJS_TOKEN_STATEMENT);
- - if (nxt_slow_path(stmt == NULL)) {
- - return NXT_ERROR;
- - }
- -
- - stmt->left = *child;
- - stmt->right = new_node;
- -
- - *child = stmt;
- -
- - return NXT_OK;
- -}
- -
- -
- -static nxt_int_t
- njs_parser_export_sink(njs_vm_t *vm, njs_parser_t *parser)
- {
- nxt_uint_t n;
- diff -r 366a094ef6b2 -r 4f81c1cfc677 njs/njs_parser.h
- --- a/njs/njs_parser.h Sat Apr 13 01:07:34 2019 +0800
- +++ b/njs/njs_parser.h Sat Apr 13 01:11:49 2019 +0800
- @@ -40,6 +40,7 @@ struct njs_parser_node_s {
- njs_token_t token:16;
- uint8_t ctor:1;
- uint8_t temporary; /* 1 bit */
- + uint8_t hoist; /* 1 bit */
- uint32_t token_line;
- union {
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement