]> git.kaiwu.me - njs.git/commitdiff
Fixed variable declaration with "from" name.
authorDmitry Volyntsev <xeioex@nginx.com>
Fri, 11 Oct 2019 14:08:28 +0000 (17:08 +0300)
committerDmitry Volyntsev <xeioex@nginx.com>
Fri, 11 Oct 2019 14:08:28 +0000 (17:08 +0300)
Previously, "from" was declared as a reserved word.

src/njs_lexer.h
src/njs_lexer_keyword.c
src/njs_parser.c
src/njs_parser.h
src/test/njs_unit_test.c

index 52f0e02a75e1a91ba62f781bf1813b9e70d66409..d0afa8067755671f9d7e384e0e26f5e001704de6 100644 (file)
@@ -214,7 +214,6 @@ typedef enum {
     NJS_TOKEN_CLEAR_TIMEOUT,
 
     NJS_TOKEN_IMPORT,
-    NJS_TOKEN_FROM,
     NJS_TOKEN_EXPORT,
 
     NJS_TOKEN_RESERVED,
index a59243385fa9f8a614e3b0b9ccfc43211fc1837a..af6322ab91449c09d0edf2707314c25e3654168f 100644 (file)
@@ -96,7 +96,6 @@ static const njs_keyword_t  njs_keywords[] = {
 
     /* Module. */
     { njs_str("import"),        NJS_TOKEN_IMPORT, 0 },
-    { njs_str("from"),          NJS_TOKEN_FROM, 0 },
     { njs_str("export"),        NJS_TOKEN_EXPORT, 0 },
 
     /* Reserved words. */
index 18cecc918bffc8028a2dfa8faba2cbe6a042fc64..8b870fe7b860dcd9f7c7953ee0653f2ff6f92f9e 100644 (file)
@@ -1825,7 +1825,7 @@ njs_parser_import_statement(njs_vm_t *vm, njs_parser_t *parser)
         return token;
     }
 
-    token = njs_parser_match(vm, parser, token, NJS_TOKEN_FROM);
+    token = njs_parser_match_name(vm, parser, token, "from");
     if (njs_slow_path(token <= NJS_TOKEN_ILLEGAL)) {
         return token;
     }
index 113e00b7b5546814848b814721d9dc360e9b70f5..5a33c8607a178a211cda3919d674b6a18f4b2484 100644 (file)
@@ -233,6 +233,27 @@ njs_parser_match(njs_vm_t *vm, njs_parser_t *parser, njs_token_t token,
 }
 
 
+njs_inline njs_token_t
+njs_parser_match_name(njs_vm_t *vm, njs_parser_t *parser, njs_token_t token,
+    const char *name)
+{
+    size_t     len;
+    njs_str_t  *text;
+
+    len = njs_strlen(name);
+    text = njs_parser_text(parser);
+
+    if (njs_fast_path(token == NJS_TOKEN_NAME
+                      && text->length == len
+                      && memcmp(text->start, name, len) == 0))
+    {
+        return njs_parser_token(vm, parser);
+    }
+
+    return njs_parser_unexpected_token(vm, parser, token);
+}
+
+
 njs_inline njs_variable_t *
 njs_parser_variable_add(njs_vm_t *vm, njs_parser_t *parser,
     njs_variable_type_t type)
index 9d83dca1d9ec878649ca28e1f43f6ee991729311..6c9e35400cb67ac03c7a4bdbc8584cc2072d3424 100644 (file)
@@ -69,6 +69,9 @@ static njs_unit_test_t  njs_test[] =
     { njs_str("var \n a, \n b; b"),
       njs_str("undefined") },
 
+    { njs_str("var from = 2; from + 2"),
+      njs_str("4") },
+
     { njs_str("var a / ="),
       njs_str("SyntaxError: Unexpected token \"/\" in 1") },