From cebb619f8e684e6ce844f83299c4abac57ab7fa3 Mon Sep 17 00:00:00 2001 From: Stephan Unverwerth Date: Sat, 18 Apr 2020 14:00:43 +0200 Subject: [PATCH] LibJS: Fix parsing of IfStatement, fixes #1829 --- Libraries/LibJS/Parser.cpp | 5 ++++- .../Tests/automatic-semicolon-insertion.js | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/Libraries/LibJS/Parser.cpp b/Libraries/LibJS/Parser.cpp index 41f9c137dd..aafd977e63 100644 --- a/Libraries/LibJS/Parser.cpp +++ b/Libraries/LibJS/Parser.cpp @@ -664,8 +664,11 @@ NonnullRefPtr Parser::parse_return_statement() return create_ast_node(nullptr); if (match_expression()) { - return create_ast_node(parse_expression(0)); + auto expression = parse_expression(0); + consume_or_insert_semicolon(); + return create_ast_node(move(expression)); } + consume_or_insert_semicolon(); return create_ast_node(nullptr); } diff --git a/Libraries/LibJS/Tests/automatic-semicolon-insertion.js b/Libraries/LibJS/Tests/automatic-semicolon-insertion.js index bec9c02252..0673e2bf69 100644 --- a/Libraries/LibJS/Tests/automatic-semicolon-insertion.js +++ b/Libraries/LibJS/Tests/automatic-semicolon-insertion.js @@ -5,6 +5,25 @@ load("test-common.js"); * If this file produces syntax errors, something is wrong. */ +function bar() { + // https://github.com/SerenityOS/serenity/issues/1829 + if (1) + return 1; + else + return 0; + + if (1) + return 1 + else + return 0 + + if (1) + return 1 + else + return 0; + +} + function foo() { for (var i = 0; i < 4; i++) { break // semicolon inserted here