]> git.kaiwu.me - njs.git/commitdiff
Removed support for functions in labelled statements.
authorAlexander Borisov <alexander.borisov@nginx.com>
Wed, 3 Jun 2020 12:17:51 +0000 (15:17 +0300)
committerAlexander Borisov <alexander.borisov@nginx.com>
Wed, 3 Jun 2020 12:17:51 +0000 (15:17 +0300)
In strict mode, support for functions is prohibited.

The issue was introduced in 86f55a7dc4a4.

src/njs_parser.c
src/test/njs_unit_test.c

index 7ffede6a27f7db136585fb0436154312495873c0..e209895f26564515493619307dc006a1a9f23c6c 100644 (file)
@@ -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);
index 6b4042f71e8f63b31d718ae4e95f4d9b92cea587..8bcf648f5ba2ba3b17bd390dc0599570d9248e05 100644 (file)
@@ -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") },