LibJS: Ensure capacity for created lexical and variable environments

If the minimal amount of required bindings is known in advance, it could
be used to ensure capacity to avoid resizing the internal vector that
holds bindings.
This commit is contained in:
Aliaksandr Kalenik
2024-05-09 17:10:20 +02:00
committed by Andreas Kling
parent a4f70986a0
commit 3d4b13a01c
3 changed files with 16 additions and 5 deletions

View File

@@ -120,7 +120,7 @@ CodeGenerationErrorOr<void> Generator::emit_function_declaration_instantiation(E
}
}
} else {
emit<Op::CreateVariableEnvironment>();
emit<Op::CreateVariableEnvironment>(function.m_var_environment_bindings_count);
if (scope_body) {
for (auto const& variable_to_initialize : function.m_var_names_to_initialize_binding) {
@@ -158,7 +158,7 @@ CodeGenerationErrorOr<void> Generator::emit_function_declaration_instantiation(E
if (!function.m_strict) {
bool can_elide_declarative_environment = !function.m_contains_direct_call_to_eval && (!scope_body || !scope_body->has_non_local_lexical_declarations());
if (!can_elide_declarative_environment) {
emit<Op::CreateLexicalEnvironment>();
emit<Op::CreateLexicalEnvironment>(function.m_lex_environment_bindings_count);
}
}