LibJS/Bytecode: Fix bogus program termination after try with catch

For `try` statements with a `catch` clause, we were generating *two*
"next" blocks. This meant that not throwing an exception would cause
execution to stop.

Fix this by using the "next" block pointer for the try "entry" and
"handler" blocks.
This commit is contained in:
Andreas Kling 2023-05-13 18:50:27 +02:00
commit 81a62f4f59
Notes: sideshowbarker 2024-07-17 22:01:16 +09:00

View file

@ -2254,10 +2254,10 @@ Bytecode::CodeGenerationErrorOr<void> TryStatement::generate_bytecode(Bytecode::
if (m_finalizer) {
generator.emit<Bytecode::Op::Jump>(finalizer_target);
} else {
auto& block = generator.make_block();
if (!next_block)
next_block = &generator.make_block();
generator.emit<Bytecode::Op::LeaveUnwindContext>();
generator.emit<Bytecode::Op::Jump>(Bytecode::Label { block });
next_block = &block;
generator.emit<Bytecode::Op::Jump>(Bytecode::Label { *next_block });
}
}