diff --git a/Libraries/LibJS/Parser.cpp b/Libraries/LibJS/Parser.cpp index a612ff59e2c..b725982005d 100644 --- a/Libraries/LibJS/Parser.cpp +++ b/Libraries/LibJS/Parser.cpp @@ -353,6 +353,10 @@ RefPtr Parser::try_parse_arrow_function_expression(bool expe return nullptr; parameters.append({ consume().value(), {} }); } + // If there's a newline between the closing paren and arrow it's not a valid arrow function, + // ASI should kick in instead (it'll then fail with "Unexpected token Arrow") + if (m_parser_state.m_current_token.trivia().contains('\n')) + return nullptr; if (!match(TokenType::Arrow)) return nullptr; consume(); diff --git a/Libraries/LibJS/Tests/functions/arrow-functions.js b/Libraries/LibJS/Tests/functions/arrow-functions.js index cb741e2a172..6af87905143 100644 --- a/Libraries/LibJS/Tests/functions/arrow-functions.js +++ b/Libraries/LibJS/Tests/functions/arrow-functions.js @@ -160,4 +160,5 @@ test("syntax errors", () => { expect("(a b) => {}").not.toEval(); expect("(a ...b) => {}").not.toEval(); expect("(a = 1 = 2) => {}").not.toEval(); + expect("()\n=> {}").not.toEval(); });