From 0b49b93e98fced031957b910fc54d6342496d3f5 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sat, 13 May 2023 13:37:12 +0200 Subject: [PATCH] LibJS/Bytecode: Variable declarators should always prefer lexical env This fixes an issue where object environments (from `with` statement) were bypassed by statements like `var x = 1` (for objects with an `x` property). Fixes 25 tests in test262. :^) --- Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp b/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp index 2c942e4b1d..376705fb3e 100644 --- a/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp +++ b/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp @@ -1487,11 +1487,10 @@ static Bytecode::CodeGenerationErrorOr generate_binding_pattern_bytecode(B static Bytecode::CodeGenerationErrorOr assign_accumulator_to_variable_declarator(Bytecode::Generator& generator, VariableDeclarator const& declarator, VariableDeclaration const& declaration) { auto initialization_mode = declaration.is_lexical_declaration() ? Bytecode::Op::SetVariable::InitializationMode::Initialize : Bytecode::Op::SetVariable::InitializationMode::Set; - auto environment_mode = declaration.is_lexical_declaration() ? Bytecode::Op::EnvironmentMode::Lexical : Bytecode::Op::EnvironmentMode::Var; return declarator.target().visit( [&](NonnullRefPtr const& id) -> Bytecode::CodeGenerationErrorOr { - generator.emit(generator.intern_identifier(id->string()), initialization_mode, environment_mode); + generator.emit(generator.intern_identifier(id->string()), initialization_mode); return {}; }, [&](NonnullRefPtr const& pattern) -> Bytecode::CodeGenerationErrorOr {