Преглед изворни кода

LibJS: Fix parsing of IfStatement, fixes #1829

Stephan Unverwerth пре 5 година
родитељ
комит
cebb619f8e
2 измењених фајлова са 23 додато и 1 уклоњено
  1. 4 1
      Libraries/LibJS/Parser.cpp
  2. 19 0
      Libraries/LibJS/Tests/automatic-semicolon-insertion.js

+ 4 - 1
Libraries/LibJS/Parser.cpp

@@ -664,8 +664,11 @@ NonnullRefPtr<ReturnStatement> Parser::parse_return_statement()
         return create_ast_node<ReturnStatement>(nullptr);
 
     if (match_expression()) {
-        return create_ast_node<ReturnStatement>(parse_expression(0));
+        auto expression = parse_expression(0);
+        consume_or_insert_semicolon();
+        return create_ast_node<ReturnStatement>(move(expression));
     }
+
     consume_or_insert_semicolon();
     return create_ast_node<ReturnStatement>(nullptr);
 }

+ 19 - 0
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