Files
ladybird/Libraries/LibJS/Bytecode/ASTCodegen.cpp
Andreas Kling 6e7830da71 LibJS: Give try/catch/finally blocks own completion registers
Each of the three blocks in a TryStatement (try body, catch body,
finally body) needs its own CompletionRegisterScope so that
break/continue inside any of them carries the block's own
completion value rather than leaking a value from a surrounding
statement or a different block.

Previously, statements inside these blocks would update the
enclosing scope's completion register (e.g. a for-loop's
register), and if break/continue fired with no prior expression
value, the enclosing register's stale value would leak through
as the completion value instead of undefined.

Each block now allocates a fresh register initialized to
undefined and uses it as the current completion register during
body generation. This matches the pattern already used by loops
and switch statements.
2026-02-11 14:29:36 +01:00

187 KiB