From 2e98c173475abbf5589a7162f3af4d247bf8336c Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sat, 26 Nov 2022 20:33:52 +0100 Subject: [PATCH] LibJS: Shrink DeclarativeEnvironment bindings vector to fit After setting up all the bindings in function_declaration_instantiation, we now ask DeclarativeEnvironment to do a shrink_to_fit() on its vector of bindings. This ends up saving 5.6 MiB on twitter.com/awesomekling :^) --- Userland/Libraries/LibJS/Runtime/DeclarativeEnvironment.cpp | 5 +++++ Userland/Libraries/LibJS/Runtime/DeclarativeEnvironment.h | 2 ++ .../Libraries/LibJS/Runtime/ECMAScriptFunctionObject.cpp | 5 +++++ 3 files changed, 12 insertions(+) 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 {}; }