]> git.kaiwu.me - njs.git/commitdiff
Fixed handling of empty block statements.
authorhongzhidao <hongzhidao@gmail.com>
Mon, 20 May 2019 15:14:29 +0000 (23:14 +0800)
committerhongzhidao <hongzhidao@gmail.com>
Mon, 20 May 2019 15:14:29 +0000 (23:14 +0800)
This closes #165 issue on Github.

njs/njs_generator.c
njs/njs_parser.c
njs/test/njs_unit_test.c

index e91430180902f76a05612d22dc42bdd93f0c7d5b..8b8e69cdc0ea2d71636d99fb9cd6adb802a3eaac 100644 (file)
@@ -1558,7 +1558,7 @@ njs_generate_block_statement(njs_vm_t *vm, njs_generator_t *generator,
         return ret;
     }
 
-    ret = njs_generate_statement(vm, generator, node->left);
+    ret = njs_generate_statement(vm, generator, node);
     if (nxt_slow_path(ret != NXT_OK)) {
         return ret;
     }
index 82207334c2bb10220d824f231a1707a7579991f9..3ad9f551fcfbdd62e1f263c6c4298c57fd2a25d5 100644 (file)
@@ -468,19 +468,15 @@ njs_parser_block_statement(njs_vm_t *vm, njs_parser_t *parser)
         }
     }
 
-    if (parser->node != NULL) {
-        /* The statement is not empty block or just semicolon. */
-
-        node = njs_parser_node_new(vm, parser, NJS_TOKEN_BLOCK);
-        if (nxt_slow_path(node == NULL)) {
-            return NJS_TOKEN_ERROR;
-        }
-
-        node->left = parser->node;
-        node->right = NULL;
-        parser->node = node;
+    node = njs_parser_node_new(vm, parser, NJS_TOKEN_BLOCK);
+    if (nxt_slow_path(node == NULL)) {
+        return NJS_TOKEN_ERROR;
     }
 
+    node->left = parser->node;
+    node->right = NULL;
+    parser->node = node;
+
     njs_parser_scope_end(vm, parser);
 
     return njs_parser_token(vm, parser);
index 41093c26bb2b8f8fb315f7c1bfd2ac29bb713c86..60b214e7ee4ec2a46a9d951e04370149ce515001 100644 (file)
@@ -6016,6 +6016,9 @@ static njs_unit_test_t  njs_test[] =
     { nxt_string("function f() { return 1; } { function f() { return 2; } { function f() { return 3; } }} f()"),
       nxt_string("1") },
 
+    { nxt_string("{function f() {} {} f() }"),
+      nxt_string("undefined") },
+
     { nxt_string("{ var f; function f() {} }"),
       nxt_string("SyntaxError: \"f\" has already been declared in 1") },