1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 04:27:43 +00:00

LibJS/JIT: Compile the BlockDeclarationInstantiation instruction

This commit is contained in:
Simon Wanner 2023-10-29 15:13:28 +01:00 committed by Andreas Kling
parent a28d6291ad
commit 09dce5f1bd
3 changed files with 20 additions and 1 deletions

View file

@ -1162,6 +1162,22 @@ void Compiler::compile_concat_string(Bytecode::Op::ConcatString const& op)
check_exception();
}
static void cxx_block_declaration_instantiation(VM& vm, ScopeNode const& scope_node)
{
auto old_environment = vm.running_execution_context().lexical_environment;
vm.bytecode_interpreter().saved_lexical_environment_stack().append(old_environment);
vm.running_execution_context().lexical_environment = new_declarative_environment(*old_environment);
scope_node.block_declaration_instantiation(vm, vm.running_execution_context().lexical_environment);
}
void Compiler::compile_block_declaration_instantiation(Bytecode::Op::BlockDeclarationInstantiation const& op)
{
m_assembler.mov(
Assembler::Operand::Register(ARG1),
Assembler::Operand::Imm(bit_cast<u64>(&op.scope_node())));
native_call((void*)cxx_block_declaration_instantiation);
}
void Compiler::jump_to_exit()
{
m_assembler.jump(m_exit_label);