LibJS: Make EnterUnwindContext a terminator op

Otherwise a basic block could have multiple outgoing edges without
having much reason to do so.
This commit is contained in:
Ali Mohammad Pur 2021-06-13 20:39:40 +04:30 committed by Ali Mohammad Pur
parent e73b142a97
commit 4c7c7c38e2
Notes: sideshowbarker 2024-07-18 12:13:16 +09:00
3 changed files with 11 additions and 3 deletions

View file

@ -991,8 +991,11 @@ void TryStatement::generate_bytecode(Bytecode::Generator& generator) const
}
}
auto& target_block = generator.make_block();
generator.switch_to_basic_block(saved_block);
generator.emit<Bytecode::Op::EnterUnwindContext>(handler_target, finalizer_target);
generator.emit<Bytecode::Op::EnterUnwindContext>(Bytecode::Label { target_block }, handler_target, finalizer_target);
generator.switch_to_basic_block(target_block);
m_block->generate_bytecode(generator);
if (m_finalizer && !generator.is_current_block_terminated())
generator.emit<Bytecode::Op::Jump>(finalizer_target);