[njs] Introduced reserved words in strict mode.

Alexander Borisov alexander.borisov at nginx.com
Fri Apr 30 13:04:42 UTC 2021


details:   https://hg.nginx.org/njs/rev/28f33155ad3f
branches:  
changeset: 1630:28f33155ad3f
user:      Alexander Borisov <alexander.borisov at nginx.com>
date:      Fri Apr 30 16:02:20 2021 +0300
description:
Introduced reserved words in strict mode.

diffstat:

 src/njs_lexer_tables.h   |  16 ++++++++--------
 src/njs_parser.c         |   6 ++++++
 src/test/njs_unit_test.c |   8 +++++++-
 utils/lexer_keyword.py   |  16 ++++++++--------
 4 files changed, 29 insertions(+), 17 deletions(-)

diffs (134 lines):

diff -r 0a2a0b5a74f4 -r 28f33155ad3f src/njs_lexer_tables.h
--- a/src/njs_lexer_tables.h	Fri Apr 30 16:02:08 2021 +0300
+++ b/src/njs_lexer_tables.h	Fri Apr 30 16:02:20 2021 +0300
@@ -159,7 +159,7 @@ static const njs_keyword_t njs_lexer_kws
     {
         .entry = { njs_str("implements") },
         .type = NJS_TOKEN_IMPLEMENTS,
-        .reserved = 0
+        .reserved = 1
     },
 
     {
@@ -183,13 +183,13 @@ static const njs_keyword_t njs_lexer_kws
     {
         .entry = { njs_str("interface") },
         .type = NJS_TOKEN_INTERFACE,
-        .reserved = 0
+        .reserved = 1
     },
 
     {
         .entry = { njs_str("let") },
         .type = NJS_TOKEN_LET,
-        .reserved = 0
+        .reserved = 1
     },
 
     {
@@ -219,25 +219,25 @@ static const njs_keyword_t njs_lexer_kws
     {
         .entry = { njs_str("package") },
         .type = NJS_TOKEN_PACKAGE,
-        .reserved = 0
+        .reserved = 1
     },
 
     {
         .entry = { njs_str("private") },
         .type = NJS_TOKEN_PRIVATE,
-        .reserved = 0
+        .reserved = 1
     },
 
     {
         .entry = { njs_str("protected") },
         .type = NJS_TOKEN_PROTECTED,
-        .reserved = 0
+        .reserved = 1
     },
 
     {
         .entry = { njs_str("public") },
         .type = NJS_TOKEN_PUBLIC,
-        .reserved = 0
+        .reserved = 1
     },
 
     {
@@ -249,7 +249,7 @@ static const njs_keyword_t njs_lexer_kws
     {
         .entry = { njs_str("static") },
         .type = NJS_TOKEN_STATIC,
-        .reserved = 0
+        .reserved = 1
     },
 
     {
diff -r 0a2a0b5a74f4 -r 28f33155ad3f src/njs_parser.c
--- a/src/njs_parser.c	Fri Apr 30 16:02:08 2021 +0300
+++ b/src/njs_parser.c	Fri Apr 30 16:02:20 2021 +0300
@@ -4550,6 +4550,12 @@ njs_parser_declaration(njs_parser_t *par
             break;
 
         default:
+            if (njs_lexer_token_is_reserved(token)) {
+                njs_lexer_consume_token(parser->lexer, 1);
+                njs_parser_next(parser, njs_parser_failed_state);
+                return NJS_OK;
+            }
+
             if (njs_lexer_token_is_binding_identifier(token)) {
                 njs_parser_next(parser, njs_parser_lexical_declaration);
                 break;
diff -r 0a2a0b5a74f4 -r 28f33155ad3f src/test/njs_unit_test.c
--- a/src/test/njs_unit_test.c	Fri Apr 30 16:02:08 2021 +0300
+++ b/src/test/njs_unit_test.c	Fri Apr 30 16:02:20 2021 +0300
@@ -9475,6 +9475,12 @@ static njs_unit_test_t  njs_test[] =
     { njs_str("function f(){} typeof(f)"),
       njs_str("function") },
 
+    { njs_str("function let() {}"),
+      njs_str("SyntaxError: Unexpected token \"let\" in 1") },
+
+    { njs_str("function static() {}"),
+      njs_str("SyntaxError: Unexpected token \"static\" in 1") },
+
     /* Recursive factorial. */
 
     { njs_str("function f(a) {"
@@ -18101,7 +18107,7 @@ static njs_unit_test_t  njs_test[] =
 
     { njs_str("var let = 123;"
               "let"),
-      njs_str("123") },
+      njs_str("SyntaxError: Unexpected token \"let\" in 1") },
 
     { njs_str("var const = 123"),
       njs_str("SyntaxError: Unexpected token \"const\" in 1") },
diff -r 0a2a0b5a74f4 -r 28f33155ad3f utils/lexer_keyword.py
--- a/utils/lexer_keyword.py	Fri Apr 30 16:02:08 2021 +0300
+++ b/utils/lexer_keyword.py	Fri Apr 30 16:02:20 2021 +0300
@@ -64,14 +64,14 @@ global_keywords = {
     "debugger": 1,
     "enum": 1,
     "extends": 1,
-    "implements": 0,
-    "interface": 0,
-    "let": 0,
-    "package": 0,
-    "private": 0,
-    "protected": 0,
-    "public": 0,
-    "static": 0,
+    "implements": 1,
+    "interface": 1,
+    "let": 1,
+    "package": 1,
+    "private": 1,
+    "protected": 1,
+    "public": 1,
+    "static": 1,
     "super": 1
 }
 


More information about the nginx-devel mailing list