mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-07-29 04:09:13 +00:00
LibJS: Generate unwind chains for break in Bytecode
This uses a newly added instruction `ScheduleJump` This instruction tells the finally proceeding it, that instead of jumping to it's next block it should jump to the designated block.
This commit is contained in:
parent
495ba53e46
commit
f5376cb282
Notes:
sideshowbarker
2024-07-17 21:26:19 +09:00
Author: https://github.com/Hendiadyoin1
Commit: f5376cb282
Pull-request: https://github.com/SerenityOS/serenity/pull/16184
Issue: https://github.com/SerenityOS/serenity/issues/16393
Reviewed-by: https://github.com/alimpfard ✅
Reviewed-by: https://github.com/kleinesfilmroellchen
9 changed files with 123 additions and 19 deletions
|
@ -134,6 +134,10 @@ static void generate_cfg_for_block(BasicBlock const& current_block, PassPipeline
|
|||
if (auto const* finalizer = unwind_frames.last()->finalizer)
|
||||
enter_label(Label { *finalizer }, current_block);
|
||||
return;
|
||||
case ScheduleJump:
|
||||
enter_label(Label { *unwind_frames.last()->finalizer }, current_block);
|
||||
enter_label(static_cast<Op::ScheduleJump const&>(instruction).target(), *unwind_frames.last()->finalizer);
|
||||
return;
|
||||
default:
|
||||
dbgln("Unhandled terminator instruction: `{}`", instruction.to_deprecated_string(executable.executable));
|
||||
VERIFY_NOT_REACHED();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue