LibJS: Allocate ExecutionContext memory using alloca() when possible

This should be faster than heap allocation. However, heap allocation is
still necessary in some cases, such as with generators and async
functions.
This commit is contained in:
Aliaksandr Kalenik 2025-04-23 23:44:24 +02:00 committed by Andreas Kling
parent 5a92929282
commit a329868c1b
Notes: github-actions[bot] 2025-04-24 08:32:11 +00:00
10 changed files with 42 additions and 12 deletions

View file

@ -501,7 +501,9 @@ ThrowCompletionOr<Value> ECMAScriptFunctionObject::internal_call(Value this_argu
}
u32 arguments_count = max(arguments_list.size(), formal_parameters().size());
auto callee_context = ExecutionContext::create(m_bytecode_executable->number_of_registers + m_bytecode_executable->constants.size() + m_bytecode_executable->local_variable_names.size(), arguments_count);
auto registers_and_constants_and_locals_count = m_bytecode_executable->number_of_registers + m_bytecode_executable->constants.size() + m_bytecode_executable->local_variable_names.size();
ExecutionContext* callee_context = nullptr;
ALLOCATE_EXECUTION_CONTEXT_ON_NATIVE_STACK(callee_context, registers_and_constants_and_locals_count, arguments_count);
// Non-standard
auto arguments = callee_context->arguments();
@ -571,7 +573,9 @@ ThrowCompletionOr<GC::Ref<Object>> ECMAScriptFunctionObject::internal_construct(
}
u32 arguments_count = max(arguments_list.size(), formal_parameters().size());
auto callee_context = ExecutionContext::create(m_bytecode_executable->number_of_registers + m_bytecode_executable->constants.size() + m_bytecode_executable->local_variable_names.size(), arguments_count);
auto registers_and_constants_and_locals_count = m_bytecode_executable->number_of_registers + m_bytecode_executable->constants.size() + m_bytecode_executable->local_variable_names.size();
ExecutionContext* callee_context = nullptr;
ALLOCATE_EXECUTION_CONTEXT_ON_NATIVE_STACK(callee_context, registers_and_constants_and_locals_count, arguments_count);
// Non-standard
auto arguments = callee_context->arguments();