From: Dmitry Volyntsev Date: Thu, 22 Nov 2018 14:38:40 +0000 (+0300) Subject: Fixed parsing of throw statement inside if. X-Git-Tag: 0.2.6~6 X-Git-Url: http://www.kaiwu.me/postgresql/commit/?a=commitdiff_plain;h=2dfc99aa73968dbf41270f2c50bd39d92cc2c06e;p=njs.git Fixed parsing of throw statement inside if. --- diff --git a/njs/njs_parser.c b/njs/njs_parser.c index f0aaa516..1252df69 100644 --- a/njs/njs_parser.c +++ b/njs/njs_parser.c @@ -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; + } } diff --git a/njs/test/njs_unit_test.c b/njs/test/njs_unit_test.c index c4176494..3beaf395 100644 --- a/njs/test/njs_unit_test.c +++ b/njs/test/njs_unit_test.c @@ -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)"),