]> git.kaiwu.me - njs.git/commitdiff
Fixed parsing of throw statement inside if.
authorDmitry Volyntsev <xeioex@nginx.com>
Thu, 22 Nov 2018 14:38:40 +0000 (17:38 +0300)
committerDmitry Volyntsev <xeioex@nginx.com>
Thu, 22 Nov 2018 14:38:40 +0000 (17:38 +0300)
njs/njs_parser.c
njs/test/njs_unit_test.c

index f0aaa516e81b046e33d77e907033a896ad82c1a3..1252df69efd34abffa5f8258dba52275ac0fd65b 100644 (file)
@@ -1696,7 +1696,23 @@ njs_parser_try_statement(njs_vm_t *vm, njs_parser_t *parser)
 
     parser->node = try;
 
-    return token;
+    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;
+
+    default:
+        if (parser->lexer->prev_token == NJS_TOKEN_LINE_END) {
+            return token;
+        }
+
+        return NJS_TOKEN_ILLEGAL;
+    }
 }
 
 
index c4176494eae5964c28453dc8fe3fd74d3f5fabc6..3beaf3953f873ba9c6febd61ff4d5a500a05c5bc 100644 (file)
@@ -2159,6 +2159,15 @@ static njs_unit_test_t  njs_test[] =
     { nxt_string("(function(){ if(true) return 1\n;\n else return 0; })()"),
       nxt_string("1") },
 
+    { nxt_string("function f(n) {if (n)\n throw 'foo'\nelse return 1}; f(0)"),
+      nxt_string("1") },
+
+    { nxt_string("function f(n) {if (n)\n throw 'foo'\nelse return 1}; f(1)"),
+      nxt_string("foo") },
+
+    { nxt_string("function f(n) {if (n == 1) throw 'foo'\nelse if (n == 2) return 1}; f(2)"),
+      nxt_string("1") },
+
     /* do while. */
 
     { nxt_string("do { break } if (false)"),