From: hongzhidao Date: Mon, 20 May 2019 15:14:29 +0000 (+0800) Subject: Fixed handling of empty block statements. X-Git-Tag: 0.3.2~2 X-Git-Url: http://git.kaiwu.me/postgresql/log/contrib/postgres_fdw/static/gitweb.js?a=commitdiff_plain;h=0622766ebf5bcd6801620be847294595257e28fd;p=njs.git Fixed handling of empty block statements. This closes #165 issue on Github. --- diff --git a/njs/njs_generator.c b/njs/njs_generator.c index e9143018..8b8e69cd 100644 --- a/njs/njs_generator.c +++ b/njs/njs_generator.c @@ -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; } diff --git a/njs/njs_parser.c b/njs/njs_parser.c index 82207334..3ad9f551 100644 --- a/njs/njs_parser.c +++ b/njs/njs_parser.c @@ -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); diff --git a/njs/test/njs_unit_test.c b/njs/test/njs_unit_test.c index 41093c26..60b214e7 100644 --- a/njs/test/njs_unit_test.c +++ b/njs/test/njs_unit_test.c @@ -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") },