From 185b9a5dcd1b557794c174ae33061850c19920f1 Mon Sep 17 00:00:00 2001 From: Vadim Zhestikov Date: Mon, 29 Jan 2024 08:57:48 -0800 Subject: [PATCH] Fixed parsing of for-statement. --- src/njs_parser.c | 37 +++++-------------------------------- src/test/njs_unit_test.c | 3 +++ 2 files changed, 8 insertions(+), 32 deletions(-) diff --git a/src/njs_parser.c b/src/njs_parser.c index 6a7696b2..aa64cb41 100644 --- a/src/njs_parser.c +++ b/src/njs_parser.c @@ -5490,24 +5490,10 @@ njs_parser_iteration_statement_for(njs_parser_t *parser, } -static njs_int_t -njs_parser_for_var_in_of_expression_chk_fail(njs_parser_t *parser, - njs_lexer_token_t *token, njs_queue_link_t *current) -{ - if (parser->ret != NJS_OK) { - return njs_parser_failed(parser); - } - - return njs_parser_for_var_in_of_expression(parser, token, current); -} - - static njs_int_t njs_parser_for_expression_map_reparse(njs_parser_t *parser, njs_lexer_token_t *token, njs_queue_link_t *current) { - njs_str_t *text; - if (parser->ret != NJS_OK && parser->node != NULL) { return njs_parser_failed(parser); } @@ -5517,20 +5503,7 @@ njs_parser_for_expression_map_reparse(njs_parser_t *parser, njs_parser_next(parser, njs_parser_expression); - /* - * Here we pass not a node, but a token, this is important. - * This is necessary for correct error output. - */ - - text = njs_mp_alloc(parser->vm->mem_pool, sizeof(njs_str_t)); - if (text == NULL) { - return NJS_ERROR; - } - - *text = token->text; - - return njs_parser_after(parser, current, text, 0, - njs_parser_for_var_in_of_expression_chk_fail); + return NJS_OK; } return njs_parser_stack_pop(parser); @@ -5793,14 +5766,14 @@ njs_parser_iteration_statement_for_map(njs_parser_t *parser, *text = token->text; - ret = njs_parser_after(parser, current, text, 1, - njs_parser_for_expression_map_continue); + ret = njs_parser_after(parser, current, text, 0, + njs_parser_for_expression_map_reparse); if (ret != NJS_OK) { return NJS_ERROR; } - return njs_parser_after(parser, current, text, 0, - njs_parser_for_expression_map_reparse); + return njs_parser_after(parser, current, text, 1, + njs_parser_for_expression_map_continue); } expression_after: diff --git a/src/test/njs_unit_test.c b/src/test/njs_unit_test.c index 1c029f8f..60541815 100644 --- a/src/test/njs_unit_test.c +++ b/src/test/njs_unit_test.c @@ -2975,6 +2975,9 @@ static njs_unit_test_t njs_test[] = { njs_str("for(var``>0; 0 ;) ;"), njs_str("SyntaxError: Unexpected token \"`\" in 1") }, + { njs_str("for(1;;)for(-x;;)fr({-x;;)f"), + njs_str("SyntaxError: Unexpected token \"-\" in 1") }, + { njs_str("for(i;;)for(-new+3;;)break;"), njs_str("SyntaxError: Unexpected token \"+\" in 1") }, -- 2.47.3