From: Alexander Borisov Date: Thu, 25 Jun 2020 10:10:03 +0000 (+0300) Subject: Parser: fixed broken object literals parsing. X-Git-Tag: 0.4.2~19 X-Git-Url: http://www.kaiwu.me/postgresql/commit/static/gitweb.js?a=commitdiff_plain;h=8c895b2974b94a8574ce94f40fb3b058387a6b28;p=njs.git Parser: fixed broken object literals parsing. --- diff --git a/src/njs_parser.c b/src/njs_parser.c index be232f18..39f43db2 100644 --- a/src/njs_parser.c +++ b/src/njs_parser.c @@ -1694,7 +1694,7 @@ njs_parser_object_literal(njs_parser_t *parser, njs_lexer_token_t *token, njs_parser_next(parser, njs_parser_property_definition_list); - return njs_parser_after(parser, current, node, 0, + return njs_parser_after(parser, current, node, 1, njs_parser_object_literal_after); } @@ -1733,7 +1733,7 @@ njs_parser_property_definition_list(njs_parser_t *parser, { njs_parser_next(parser, njs_parser_property_definition); - return njs_parser_after(parser, current, parser->target, 0, + return njs_parser_after(parser, current, parser->target, 1, njs_parser_property_definition_list_after); } @@ -1750,7 +1750,7 @@ njs_parser_property_definition_list_after(njs_parser_t *parser, njs_parser_next(parser, njs_parser_property_definition); - return njs_parser_after(parser, current, parser->target, 0, + return njs_parser_after(parser, current, parser->target, 1, njs_parser_property_definition_list_after); } @@ -1866,6 +1866,9 @@ njs_parser_property_definition(njs_parser_t *parser, njs_lexer_token_t *token, temp = parser->target; switch (token->type) { + case NJS_TOKEN_CLOSE_BRACE: + return njs_parser_stack_pop(parser); + /* PropertyName */ case NJS_TOKEN_STRING: case NJS_TOKEN_ESCAPE_STRING: diff --git a/src/test/njs_unit_test.c b/src/test/njs_unit_test.c index c8b8b09e..b5812579 100644 --- a/src/test/njs_unit_test.c +++ b/src/test/njs_unit_test.c @@ -11713,7 +11713,7 @@ static njs_unit_test_t njs_test[] = njs_str("RangeError: Maximum call stack size exceeded") }, { njs_str("new Function(\"{[\".repeat(2**13));"), - njs_str("SyntaxError: Unexpected token \")\" in runtime:1") }, + njs_str("SyntaxError: Unexpected token \"}\" in runtime:1") }, { njs_str("new Function(\"{;\".repeat(2**13));"), njs_str("SyntaxError: Unexpected token \")\" in runtime:1") }, @@ -17022,6 +17022,24 @@ static njs_unit_test_t njs_test[] = { njs_str("object?."), njs_str("SyntaxError: Unexpected end of input in 1") }, + + { njs_str("`${{a: 1, b}}`"), + njs_str("ReferenceError: \"b\" is not defined in 1") }, + + { njs_str("`${{a: 1, b:}}`"), + njs_str("SyntaxError: Unexpected token \"}\" in 1") }, + + { njs_str("`${{a: 1, b:,}}`"), + njs_str("SyntaxError: Unexpected token \",\" in 1") }, + + { njs_str("`${{a: 1, b: 2,}}`"), + njs_str("[object Object]") }, + + { njs_str("`${{a: 1,, b: 2}}`"), + njs_str("SyntaxError: Unexpected token \",\" in 1") }, + + { njs_str("`${{f(){-} - {}}`"), + njs_str("SyntaxError: Unexpected token \"}\" in 1") }, };