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;
+ }
}
{ 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)"),