[njs] Fixed variable declaration with "from" name.
Dmitry Volyntsev
xeioex at nginx.com
Fri Oct 11 14:25:48 UTC 2019
details: https://hg.nginx.org/njs/rev/b4cd260f7b69
branches:
changeset: 1183:b4cd260f7b69
user: Dmitry Volyntsev <xeioex at nginx.com>
date: Fri Oct 11 17:08:28 2019 +0300
description:
Fixed variable declaration with "from" name.
Previously, "from" was declared as a reserved word.
diffstat:
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(-)
diffs (78 lines):
diff -r a4e44e7e6f38 -r b4cd260f7b69 src/njs_lexer.h
--- a/src/njs_lexer.h Fri Oct 11 06:50:33 2019 +0300
+++ b/src/njs_lexer.h Fri Oct 11 17:08:28 2019 +0300
@@ -214,7 +214,6 @@ typedef enum {
NJS_TOKEN_CLEAR_TIMEOUT,
NJS_TOKEN_IMPORT,
- NJS_TOKEN_FROM,
NJS_TOKEN_EXPORT,
NJS_TOKEN_RESERVED,
diff -r a4e44e7e6f38 -r b4cd260f7b69 src/njs_lexer_keyword.c
--- a/src/njs_lexer_keyword.c Fri Oct 11 06:50:33 2019 +0300
+++ b/src/njs_lexer_keyword.c Fri Oct 11 17:08:28 2019 +0300
@@ -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 -r a4e44e7e6f38 -r b4cd260f7b69 src/njs_parser.c
--- a/src/njs_parser.c Fri Oct 11 06:50:33 2019 +0300
+++ b/src/njs_parser.c Fri Oct 11 17:08:28 2019 +0300
@@ -1825,7 +1825,7 @@ njs_parser_import_statement(njs_vm_t *vm
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 -r a4e44e7e6f38 -r b4cd260f7b69 src/njs_parser.h
--- a/src/njs_parser.h Fri Oct 11 06:50:33 2019 +0300
+++ b/src/njs_parser.h Fri Oct 11 17:08:28 2019 +0300
@@ -233,6 +233,27 @@ njs_parser_match(njs_vm_t *vm, njs_parse
}
+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 -r a4e44e7e6f38 -r b4cd260f7b69 src/test/njs_unit_test.c
--- a/src/test/njs_unit_test.c Fri Oct 11 06:50:33 2019 +0300
+++ b/src/test/njs_unit_test.c Fri Oct 11 17:08:28 2019 +0300
@@ -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") },
More information about the nginx-devel
mailing list