Browse Source

LibJS: Allow object properties called 'async'

davidot 3 năm trước cách đây
mục cha
commit
32016d3924

+ 2 - 1
Userland/Libraries/LibJS/Parser.cpp

@@ -1486,7 +1486,8 @@ NonnullRefPtr<ObjectExpression> Parser::parse_object_expression()
         if (match(TokenType::Async)) {
             auto lookahead_token = next_token();
 
-            if (lookahead_token.type() != TokenType::ParenOpen && !lookahead_token.trivia_contains_line_terminator()) {
+            if (lookahead_token.type() != TokenType::ParenOpen && lookahead_token.type() != TokenType::Colon
+                && !lookahead_token.trivia_contains_line_terminator()) {
                 consume(TokenType::Async);
                 function_kind = FunctionKind::Async;
             }

+ 8 - 0
Userland/Libraries/LibJS/Tests/syntax/async-await.js

@@ -18,6 +18,14 @@ describe("parsing object literal async functions", () => {
         expect(`x = { async
                 foo() { } }`).not.toEval();
     });
+
+    test("property on object called async", () => {
+        expect(`x = { async() { } }`).toEval();
+        expect(`x = { async() { await 4; } }`).not.toEval();
+        expect(`x = { async: 3 }`).toEval();
+        expect(`x = { async: await 3, }`).not.toEval();
+    });
+
     test("await expression", () => {
         expect(`x = { foo() { await bar(); } }`).not.toEval();
         expect(`x = { foo() { await; } }`).toEval();