Quellcode durchsuchen

LibJS: Allow patterns in parenthesized arrow function parameters

Ali Mohammad Pur vor 4 Jahren
Ursprung
Commit
ccbc54358d

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

@@ -645,7 +645,9 @@ Parser::PrimaryExpressionParseResult Parser::parse_primary_expression()
     case TokenType::ParenOpen: {
         auto paren_position = position();
         consume(TokenType::ParenOpen);
-        if ((match(TokenType::ParenClose) || match(TokenType::Identifier) || match(TokenType::TripleDot)) && !try_parse_arrow_function_expression_failed_at_position(paren_position)) {
+        if ((match(TokenType::ParenClose) || match(TokenType::Identifier) || match(TokenType::TripleDot) || match(TokenType::CurlyOpen) || match(TokenType::BracketOpen))
+            && !try_parse_arrow_function_expression_failed_at_position(paren_position)) {
+
             auto arrow_function_result = try_parse_arrow_function_expression(true);
             if (!arrow_function_result.is_null())
                 return { arrow_function_result.release_nonnull() };

+ 7 - 0
Userland/Libraries/LibJS/Tests/functions/arrow-functions.js

@@ -162,3 +162,10 @@ test("syntax errors", () => {
     expect("(a = 1 = 2) => {}").not.toEval();
     expect("()\n=> {}").not.toEval();
 });
+
+test("destructuring parameters", () => {
+    expect(`({ a }) => {}`).toEval();
+    expect(`([ a ]) => {}`).toEval();
+    expect(`{ a } => {}`).not.toEval();
+    expect(`[ a ] => {}`).not.toEval();
+});