From 4da48f78d6beacced805479a78c3058645dc47c5 Mon Sep 17 00:00:00 2001 From: Alexander Borisov Date: Wed, 3 Jun 2020 15:17:51 +0300 Subject: [PATCH] Removed support for functions in labelled statements. In strict mode, support for functions is prohibited. The issue was introduced in 86f55a7dc4a4. --- src/njs_parser.c | 13 +++---------- src/test/njs_unit_test.c | 3 +++ 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/src/njs_parser.c b/src/njs_parser.c index 7ffede6a..e209895f 100644 --- a/src/njs_parser.c +++ b/src/njs_parser.c @@ -5976,7 +5976,6 @@ njs_parser_labelled_statement(njs_parser_t *parser, njs_lexer_token_t *token, { uintptr_t unique_id; njs_variable_t *label; - njs_parser_node_t *node; unique_id = token->unique_id; @@ -6002,15 +6001,9 @@ njs_parser_labelled_statement(njs_parser_t *parser, njs_lexer_token_t *token, parser->node = NULL; if (token->type == NJS_TOKEN_FUNCTION) { - node = njs_parser_node_new(parser, NJS_TOKEN_FUNCTION); - if (node == NULL) { - return NJS_ERROR; - } - - node->token_line = token->line; - - njs_lexer_consume_token(parser->lexer, 1); - njs_parser_next(parser, njs_parser_function_declaration); + njs_syntax_error(parser->vm, "In strict mode code, functions can only " + "be declared at top level or inside a block."); + return NJS_DONE; } else { njs_parser_next(parser, njs_parser_statement_wo_node); diff --git a/src/test/njs_unit_test.c b/src/test/njs_unit_test.c index 6b4042f7..8bcf648f 100644 --- a/src/test/njs_unit_test.c +++ b/src/test/njs_unit_test.c @@ -2934,6 +2934,9 @@ static njs_unit_test_t njs_test[] = { njs_str("a:{continue b}"), njs_str("SyntaxError: Undefined label \"b\" in 1") }, + { njs_str("a:function name() {}"), + njs_str("SyntaxError: In strict mode code, functions can only be declared at top level or inside a block.") }, + #if 0 /* TODO */ { njs_str("a:{1; break a}"), njs_str("1") }, -- 2.47.3