From e898c988737b012134bb4ba7e12c1db9eb48714e Mon Sep 17 00:00:00 2001 From: Linus Groh Date: Mon, 19 Oct 2020 00:29:17 +0100 Subject: [PATCH] LibJS: Don't parse arrow function with newline between ) and => 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") --- Libraries/LibJS/Parser.cpp | 4 ++++ Libraries/LibJS/Tests/functions/arrow-functions.js | 1 + 2 files changed, 5 insertions(+) diff --git a/Libraries/LibJS/Parser.cpp b/Libraries/LibJS/Parser.cpp index a612ff59e2..b725982005 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 cb741e2a17..6af8790514 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(); });