[njs] Fixed parser for newline after throw.
Dmitry Volyntsev
xeioex at nginx.com
Fri Nov 23 14:46:58 UTC 2018
details: https://hg.nginx.org/njs/rev/185aa0986f71
branches:
changeset: 669:185aa0986f71
user: Dmitry Volyntsev <xeioex at nginx.com>
date: Fri Nov 23 14:30:24 2018 +0300
description:
Fixed parser for newline after throw.
diffstat:
njs/njs_parser.c | 30 +++++++++++-------------------
njs/test/njs_unit_test.c | 3 +++
2 files changed, 14 insertions(+), 19 deletions(-)
diffs (72 lines):
diff -r ec82852f909a -r 185aa0986f71 njs/njs_parser.c
--- a/njs/njs_parser.c Thu Nov 22 19:32:48 2018 +0300
+++ b/njs/njs_parser.c Fri Nov 23 14:30:24 2018 +0300
@@ -1720,11 +1720,6 @@ njs_parser_throw_statement(njs_vm_t *vm,
njs_token_t token;
njs_parser_node_t *node;
- token = njs_parser_token(parser);
- if (nxt_slow_path(token <= NJS_TOKEN_ILLEGAL)) {
- return token;
- }
-
node = njs_parser_node_alloc(vm);
if (nxt_slow_path(node == NULL)) {
return NJS_TOKEN_ERROR;
@@ -1732,32 +1727,29 @@ njs_parser_throw_statement(njs_vm_t *vm,
node->token = NJS_TOKEN_THROW;
- token = njs_parser_expression(vm, parser, token);
+ token = njs_lexer_token(parser->lexer);
if (nxt_slow_path(token <= NJS_TOKEN_ILLEGAL)) {
return token;
}
- node->right = parser->node;
- parser->node = node;
-
- parser->code_size += sizeof(njs_vmcode_throw_t);
-
switch (token) {
- case NJS_TOKEN_SEMICOLON:
case NJS_TOKEN_LINE_END:
- return njs_parser_token(parser);
-
- case NJS_TOKEN_CLOSE_BRACE:
- case NJS_TOKEN_END:
- return token;
+ njs_parser_syntax_error(vm, parser, "Illegal newline after throw");
+ return NJS_TOKEN_ILLEGAL;
default:
- if (parser->lexer->prev_token == NJS_TOKEN_LINE_END) {
+ token = njs_parser_expression(vm, parser, token);
+ if (nxt_slow_path(token <= NJS_TOKEN_ILLEGAL)) {
return token;
}
- return NJS_TOKEN_ILLEGAL;
+ node->right = parser->node;
+ parser->node = node;
+
+ parser->code_size += sizeof(njs_vmcode_throw_t);
+
+ return token;
}
}
diff -r ec82852f909a -r 185aa0986f71 njs/test/njs_unit_test.c
--- a/njs/test/njs_unit_test.c Thu Nov 22 19:32:48 2018 +0300
+++ b/njs/test/njs_unit_test.c Fri Nov 23 14:30:24 2018 +0300
@@ -6441,6 +6441,9 @@ static njs_unit_test_t njs_test[] =
" catch(x) { a += x } a"),
nxt_string("8") },
+ { nxt_string("throw\nnull"),
+ nxt_string("SyntaxError: Illegal newline after throw in 2") },
+
{ nxt_string("var o = { valueOf: function() { return '3' } }; --o"),
nxt_string("2") },
More information about the nginx-devel
mailing list