LibJS: Skip bindings creation for locals during block declaration init

No need to create bindings for local variables as their values are not
stored in an environment.
This commit is contained in:
Aliaksandr Kalenik 2023-07-09 20:01:22 +02:00 committed by Andreas Kling
parent 47eaef9b41
commit 4a9a1d1656
Notes: sideshowbarker 2024-07-17 03:03:15 +09:00

View File

@ -4757,7 +4757,13 @@ void ScopeNode::block_declaration_instantiation(VM& vm, Environment* environment
auto is_constant_declaration = declaration.is_constant_declaration();
// NOTE: Due to the use of MUST with `create_immutable_binding` and `create_mutable_binding` below,
// an exception should not result from `for_each_bound_name`.
MUST(declaration.for_each_bound_name([&](auto const& name) {
MUST(declaration.for_each_bound_identifier([&](auto const& identifier) {
if (vm.bytecode_interpreter_if_exists() && identifier.is_local()) {
// NOTE: No need to create bindings for local variables as their values are not stored in an environment.
return;
}
auto const& name = identifier.string();
if (is_constant_declaration) {
MUST(environment->create_immutable_binding(vm, name, true));
} else {