diff --git a/src/njs_parser.c b/src/njs_parser.c index 570d65c0c..dbd9169f2 100644 --- a/src/njs_parser.c +++ b/src/njs_parser.c @@ -2827,7 +2827,7 @@ njs_parser_arguments(njs_parser_t *parser, njs_lexer_token_t *token, return njs_parser_stack_pop(parser); } - parser->scope->in_args = 1; + parser->scope->in_args++; njs_parser_next(parser, njs_parser_argument_list); @@ -2840,7 +2840,7 @@ static njs_int_t njs_parser_parenthesis_or_comma(njs_parser_t *parser, njs_lexer_token_t *token, njs_queue_link_t *current) { - parser->scope->in_args = 0; + parser->scope->in_args--; if (token->type == NJS_TOKEN_CLOSE_PARENTHESIS) { njs_lexer_consume_token(parser->lexer, 1); @@ -3575,7 +3575,7 @@ njs_parser_await(njs_parser_t *parser, njs_lexer_token_t *token, return NJS_ERROR; } - if (parser->scope->in_args) { + if (parser->scope->in_args > 0) { njs_parser_syntax_error(parser, "await in arguments not supported"); return NJS_ERROR; } diff --git a/src/njs_parser.h b/src/njs_parser.h index 6e14647a7..c685d32c6 100644 --- a/src/njs_parser.h +++ b/src/njs_parser.h @@ -26,7 +26,7 @@ struct njs_parser_scope_s { uint8_t arrow_function; uint8_t dest_disable; uint8_t async; - uint8_t in_args; + uint32_t in_args; }; diff --git a/src/test/njs_unit_test.c b/src/test/njs_unit_test.c index 830e68f3f..c4b23c1dd 100644 --- a/src/test/njs_unit_test.c +++ b/src/test/njs_unit_test.c @@ -19938,19 +19938,19 @@ static njs_unit_test_t njs_test[] = { njs_str("(async function() {console.log('Number: ' + await 111)})"), njs_str("SyntaxError: await in arguments not supported in 1") }, - { njs_str("function f(a) {}" - "(async function() {f(await 111)})"), + { njs_str("(async function() {f(await 111)})"), + njs_str("SyntaxError: await in arguments not supported in 1") }, + + { njs_str("(async function() {f(f(1), await 111)})"), njs_str("SyntaxError: await in arguments not supported in 1") }, { njs_str("async () => [await x(1)(),]; async () => [await x(1)()]"), njs_str("[object AsyncFunction]") }, - { njs_str("function f(a, b, c) {}" - "(async function() {f(1, 'a', await 111)})"), + { njs_str("(async function() {f(1, 'a', await 111)})"), njs_str("SyntaxError: await in arguments not supported in 1") }, - { njs_str("function f(a) {}" - "(async function() {f('Number: ' + await 111)})"), + { njs_str("(async function() {f('Number: ' + await 111)})"), njs_str("SyntaxError: await in arguments not supported in 1") }, { njs_str("async function f1() {try {f(await f1)} catch(e) {}}"),