From 7ea095feb0df1eb7557838273095d867c9ff3cf8 Mon Sep 17 00:00:00 2001 From: Ali Mohammad Pur Date: Thu, 31 Mar 2022 03:09:36 +0430 Subject: [PATCH] LibJS: Don't assume that for-in/of target is a variable on LHS::Assign e.g. `for ([foo.bar] in ...)` is actually a binding pattern. --- Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp b/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp index 32f5d50db0..2ade544fe7 100644 --- a/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp +++ b/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp @@ -1910,7 +1910,12 @@ static Bytecode::CodeGenerationErrorOr for_in_of_body_evaluation(Bytecode: VERIFY(declaration.declarations().size() == 1); TRY(assign_accumulator_to_variable_declarator(generator, declaration.declarations().first(), declaration)); } else { - TRY(generator.emit_store_to_reference(*lhs.get>())); + if (auto ptr = lhs.get_pointer>()) { + TRY(generator.emit_store_to_reference(**ptr)); + } else { + auto& binding_pattern = lhs.get>(); + TRY(generate_binding_pattern_bytecode(generator, *binding_pattern, Bytecode::Op::SetVariable::InitializationMode::Set, Bytecode::Register::accumulator())); + } } } }