From 98f479318a9127b4af1a7846c0fa42a96dde6e44 Mon Sep 17 00:00:00 2001 From: Aliaksandr Kalenik Date: Wed, 20 Sep 2023 01:28:43 +0200 Subject: [PATCH] LibJS: Do not create environment bindings for local variables If variable is local it is not stored in an environment so we don't need a binding. --- Userland/Libraries/LibJS/Runtime/ECMAScriptFunctionObject.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Userland/Libraries/LibJS/Runtime/ECMAScriptFunctionObject.cpp b/Userland/Libraries/LibJS/Runtime/ECMAScriptFunctionObject.cpp index 4a47f88cc5..bfb1fa9311 100644 --- a/Userland/Libraries/LibJS/Runtime/ECMAScriptFunctionObject.cpp +++ b/Userland/Libraries/LibJS/Runtime/ECMAScriptFunctionObject.cpp @@ -714,7 +714,9 @@ ThrowCompletionOr ECMAScriptFunctionObject::function_declaration_instantia // 1. Append n to instantiatedVarNames. // 2. Perform ! varEnv.CreateMutableBinding(n, false). - MUST(var_environment->create_mutable_binding(vm, id.string(), false)); + // NOTE: We ignore locals because they are stored in ExecutionContext instead of environment. + if (!id.is_local()) + MUST(var_environment->create_mutable_binding(vm, id.string(), false)); Value initial_value;