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")
This commit is contained in:
Linus Groh 2020-10-19 00:29:17 +01:00 committed by Andreas Kling
parent 965d952ff3
commit e898c98873
2 changed files with 5 additions and 0 deletions

View file

@ -353,6 +353,10 @@ RefPtr<FunctionExpression> 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();

View file

@ -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();
});