[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