]> git.kaiwu.me - njs.git/commitdiff
Fixed parser for newline after throw.
authorDmitry Volyntsev <xeioex@nginx.com>
Fri, 23 Nov 2018 11:30:24 +0000 (14:30 +0300)
committerDmitry Volyntsev <xeioex@nginx.com>
Fri, 23 Nov 2018 11:30:24 +0000 (14:30 +0300)
njs/njs_parser.c
njs/test/njs_unit_test.c

index 14fffe4c49b1ad0615a8c97ed8a1ae3323d8f69c..2b577ad039647c182a0ed69df50ccda70b1fe8aa 100644 (file)
@@ -1720,11 +1720,6 @@ njs_parser_throw_statement(njs_vm_t *vm, njs_parser_t *parser)
     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, njs_parser_t *parser)
 
     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;
     }
 }
 
index 83ceaa3966a9d68fee06c18489579ae506f5a7cd..49479120d4af7654d0b244b9a016bdea16df32aa 100644 (file)
@@ -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") },