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