From 904beef6d2dbc7efd4da27e688e841eac564e2e2 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Thu, 27 Mar 2025 14:44:04 +0000 Subject: [PATCH] LibJS: Put newly instantiated functions into locals more efficiently - Don't allocate a separate register, store directly into the local. - Mark the local as initialized to avoid emitting TDZ checks. --- Libraries/LibJS/Bytecode/Generator.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/Libraries/LibJS/Bytecode/Generator.cpp b/Libraries/LibJS/Bytecode/Generator.cpp index 19daee2b2bf..25b0c72ce1f 100644 --- a/Libraries/LibJS/Bytecode/Generator.cpp +++ b/Libraries/LibJS/Bytecode/Generator.cpp @@ -207,11 +207,14 @@ CodeGenerationErrorOr Generator::emit_function_declaration_instantiation(E } for (auto const& declaration : function.m_functions_to_initialize) { - auto function = allocate_register(); - emit(function, declaration, OptionalNone {}); - if (declaration.name_identifier()->is_local()) { - emit(local(declaration.name_identifier()->local_variable_index()), function); + auto const& identifier = *declaration.name_identifier(); + if (identifier.is_local()) { + auto local_index = identifier.local_variable_index(); + emit(local(local_index), declaration, OptionalNone {}); + set_local_initialized(local_index); } else { + auto function = allocate_register(); + emit(function, declaration, OptionalNone {}); emit(intern_identifier(declaration.name()), function); } }