diff --git a/Userland/Libraries/LibJS/Parser.cpp b/Userland/Libraries/LibJS/Parser.cpp index b423529c68..93e110f83e 100644 --- a/Userland/Libraries/LibJS/Parser.cpp +++ b/Userland/Libraries/LibJS/Parser.cpp @@ -1701,7 +1701,7 @@ NonnullRefPtr Parser::parse_variable_declaration(bool for_l init = parse_expression(2); } else if (!for_loop_variable_declaration && declaration_kind == DeclarationKind::Const) { syntax_error("Missing initializer in 'const' variable declaration"); - } else if (target.has>()) { + } else if (!for_loop_variable_declaration && target.has>()) { syntax_error("Missing initializer in destructuring assignment"); } diff --git a/Userland/Libraries/LibJS/Tests/loops/for-in-basic.js b/Userland/Libraries/LibJS/Tests/loops/for-in-basic.js index ee60bd5eb8..62b59ff708 100644 --- a/Userland/Libraries/LibJS/Tests/loops/for-in-basic.js +++ b/Userland/Libraries/LibJS/Tests/loops/for-in-basic.js @@ -49,3 +49,7 @@ test("use already-declared variable", () => { for (property in "abc"); expect(property).toBe("2"); }); + +test("allow binding patterns", () => { + expect(`for (let [a, b] in foo) {}`).toEval(); +}); diff --git a/Userland/Libraries/LibJS/Tests/loops/for-of-basic.js b/Userland/Libraries/LibJS/Tests/loops/for-of-basic.js index e08d096c68..4f6277e3f3 100644 --- a/Userland/Libraries/LibJS/Tests/loops/for-of-basic.js +++ b/Userland/Libraries/LibJS/Tests/loops/for-of-basic.js @@ -98,3 +98,7 @@ describe("errors", () => { }).toThrowWithMessage(TypeError, "[object Object] is not iterable"); }); }); + +test("allow binding patterns", () => { + expect(`for (let [a, b] of foo) {}`).toEval(); +});