From: Alexander Borisov Date: Mon, 15 Jun 2020 15:33:57 +0000 (+0300) Subject: Parser: fixed semicolon check after continue/break statement. X-Git-Tag: 0.4.2~26 X-Git-Url: http://git.kaiwu.me/postgresql/log/contrib/postgres_fdw/static/gitweb.js?a=commitdiff_plain;h=0bd757c10dfa54add2f6d58ac3895e108744d23b;p=njs.git Parser: fixed semicolon check after continue/break statement. This closes #318 issue on GitHub. --- diff --git a/src/njs_parser.c b/src/njs_parser.c index ad5d2def..61d76c9d 100644 --- a/src/njs_parser.c +++ b/src/njs_parser.c @@ -5645,13 +5645,11 @@ njs_parser_break_continue(njs_parser_t *parser, njs_lexer_token_t *token, return njs_parser_failed(parser); default: - if (!parser->strict_semicolon - && parser->lexer->prev_type == NJS_TOKEN_LINE_END) - { - break; - } - if (njs_lexer_token_is_label_identifier(token)) { + if (parser->lexer->prev_type == NJS_TOKEN_LINE_END) { + return njs_parser_stack_pop(parser); + } + if (njs_label_find(parser->vm, parser->scope, token->unique_id) == NULL) { diff --git a/src/test/njs_unit_test.c b/src/test/njs_unit_test.c index c8fe0980..e11929bf 100644 --- a/src/test/njs_unit_test.c +++ b/src/test/njs_unit_test.c @@ -2828,6 +2828,9 @@ static njs_unit_test_t njs_test[] = { njs_str("var i; for (i in [1,2,3]) {Object.seal({});}"), njs_str("undefined") }, + { njs_str("while (0) {continue\n}"), + njs_str("undefined") }, + /* break. */ { njs_str("break"), @@ -2896,6 +2899,9 @@ static njs_unit_test_t njs_test[] = "for (i in a) if (a[i] > 4) break; s += a[i]; s"), njs_str("5") }, + { njs_str("while (0) {break\n}"), + njs_str("undefined") }, + /* Labels. */ { njs_str("var n = 0; a:{n++}; a:{n++}; n"),