1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-22 19:35:06 +00:00

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
parent b01fcccbbd
commit 81a62f4f59

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