diff --git a/Userland/Libraries/LibJS/Runtime/DeclarativeEnvironment.cpp b/Userland/Libraries/LibJS/Runtime/DeclarativeEnvironment.cpp index d910d0a61c..0449887535 100644 --- a/Userland/Libraries/LibJS/Runtime/DeclarativeEnvironment.cpp +++ b/Userland/Libraries/LibJS/Runtime/DeclarativeEnvironment.cpp @@ -231,4 +231,9 @@ void DeclarativeEnvironment::initialize_or_set_mutable_binding(Badge, MUST(initialize_or_set_mutable_binding(vm, name, value)); } +void DeclarativeEnvironment::shrink_to_fit() +{ + m_bindings.shrink_to_fit(); +} + } diff --git a/Userland/Libraries/LibJS/Runtime/DeclarativeEnvironment.h b/Userland/Libraries/LibJS/Runtime/DeclarativeEnvironment.h index ceea57c9d7..18a905d531 100644 --- a/Userland/Libraries/LibJS/Runtime/DeclarativeEnvironment.h +++ b/Userland/Libraries/LibJS/Runtime/DeclarativeEnvironment.h @@ -57,6 +57,8 @@ public: ThrowCompletionOr set_mutable_binding_direct(VM&, size_t index, Value, bool strict); ThrowCompletionOr get_binding_value_direct(VM&, size_t index, bool strict); + void shrink_to_fit(); + private: ThrowCompletionOr initialize_binding_direct(VM&, Binding&, Value); ThrowCompletionOr get_binding_value_direct(VM&, Binding&, bool strict); diff --git a/Userland/Libraries/LibJS/Runtime/ECMAScriptFunctionObject.cpp b/Userland/Libraries/LibJS/Runtime/ECMAScriptFunctionObject.cpp index f0ba8470ca..9d65077b9c 100644 --- a/Userland/Libraries/LibJS/Runtime/ECMAScriptFunctionObject.cpp +++ b/Userland/Libraries/LibJS/Runtime/ECMAScriptFunctionObject.cpp @@ -577,6 +577,11 @@ ThrowCompletionOr ECMAScriptFunctionObject::function_declaration_instantia MUST(var_environment->set_mutable_binding(vm, declaration.name(), function, false)); } + if (is(*lex_environment)) + static_cast(lex_environment)->shrink_to_fit(); + if (is(*var_environment)) + static_cast(var_environment)->shrink_to_fit(); + return {}; }