Преглед на файлове

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.
Andreas Kling преди 1 година
родител
ревизия
f537d0b3cf
променени са 1 файла, в които са добавени 4 реда и са изтрити 0 реда
  1. 4 0
      Userland/Libraries/LibJS/Bytecode/Generator.cpp

+ 4 - 0
Userland/Libraries/LibJS/Bytecode/Generator.cpp

@@ -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);