LibJS/Bytecode: Allow all basic blocks to use cached this from block 0

The first block in every executable will always execute first, so if it
ends up doing a ResolveThisBinding, it's fine for all other blocks
within the same executable to use the same `this` value.
This commit is contained in:
Andreas Kling 2024-05-07 20:01:31 +02:00
commit f537d0b3cf
Notes: sideshowbarker 2024-07-17 21:26:19 +09:00

View file

@ -802,6 +802,10 @@ Operand Generator::get_this(Optional<Operand> preferred_dst)
{
if (m_current_basic_block->this_().has_value())
return m_current_basic_block->this_().value();
if (m_root_basic_blocks[0]->this_().has_value()) {
m_current_basic_block->set_this(m_root_basic_blocks[0]->this_().value());
return m_root_basic_blocks[0]->this_().value();
}
auto dst = preferred_dst.has_value() ? preferred_dst.value() : Operand(allocate_register());
emit<Bytecode::Op::ResolveThisBinding>(dst);
m_current_basic_block->set_this(dst);