diff --git a/Libraries/LibJS/Parser.cpp b/Libraries/LibJS/Parser.cpp index b2e592135898..80c528afd7fd 100644 --- a/Libraries/LibJS/Parser.cpp +++ b/Libraries/LibJS/Parser.cpp @@ -2019,7 +2019,6 @@ NonnullRefPtr Parser::parse_object_expression() if (lookahead_token.type() != TokenType::ParenOpen && lookahead_token.type() != TokenType::Colon && lookahead_token.type() != TokenType::Comma && lookahead_token.type() != TokenType::CurlyClose - && lookahead_token.type() != TokenType::Async && !lookahead_token.trivia_contains_line_terminator()) { consume(TokenType::Async); function_kind = FunctionKind::Async; diff --git a/Libraries/LibJS/Tests/object-basic.js b/Libraries/LibJS/Tests/object-basic.js index 01e7b369557c..0dfae4ce1a31 100644 --- a/Libraries/LibJS/Tests/object-basic.js +++ b/Libraries/LibJS/Tests/object-basic.js @@ -207,6 +207,15 @@ describe("shorthanded properties with special names", () => { }); test("async functions as properties", () => { + expect("({ async async() {} });").toEval(); + expect('"use strict"; ({ async async() {} });').toEval(); + + expect("({ async async });").not.toEval(); + expect("({ async async, });").not.toEval(); + expect("({ async async() });").not.toEval(); + expect("({ async async: 0 });").not.toEval(); + expect("({ async async = 0 });").not.toEval(); + expect("({ async foo });").not.toEval(); expect("({ async foo, });").not.toEval(); expect("({ async foo() });").not.toEval();