From 55b4ddba5a5f3632576bb8ad0f2991ce092ed539 Mon Sep 17 00:00:00 2001 From: Dmitry Volyntsev Date: Fri, 11 Oct 2019 17:08:28 +0300 Subject: [PATCH] Fixed variable declaration with "from" name. Previously, "from" was declared as a reserved word. --- src/njs_lexer.h | 1 - src/njs_lexer_keyword.c | 1 - src/njs_parser.c | 2 +- src/njs_parser.h | 21 +++++++++++++++++++++ src/test/njs_unit_test.c | 3 +++ 5 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/njs_lexer.h b/src/njs_lexer.h index 52f0e02a..d0afa806 100644 --- a/src/njs_lexer.h +++ b/src/njs_lexer.h @@ -214,7 +214,6 @@ typedef enum { NJS_TOKEN_CLEAR_TIMEOUT, NJS_TOKEN_IMPORT, - NJS_TOKEN_FROM, NJS_TOKEN_EXPORT, NJS_TOKEN_RESERVED, diff --git a/src/njs_lexer_keyword.c b/src/njs_lexer_keyword.c index a5924338..af6322ab 100644 --- a/src/njs_lexer_keyword.c +++ b/src/njs_lexer_keyword.c @@ -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. */ diff --git a/src/njs_parser.c b/src/njs_parser.c index 18cecc91..8b870fe7 100644 --- a/src/njs_parser.c +++ b/src/njs_parser.c @@ -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; } diff --git a/src/njs_parser.h b/src/njs_parser.h index 113e00b7..5a33c860 100644 --- a/src/njs_parser.h +++ b/src/njs_parser.h @@ -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) diff --git a/src/test/njs_unit_test.c b/src/test/njs_unit_test.c index 9d83dca1..6c9e3540 100644 --- a/src/test/njs_unit_test.c +++ b/src/test/njs_unit_test.c @@ -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") }, -- 2.47.3