1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 02:37:42 +00:00
serenity/Userland/Libraries/LibJS/JIT
Idan Horowitz 58e2fe895c LibJS: Stash thrown exception in a register before executing finalizer
This kills 2 birds with one stone:
1. It makes sure generated check_exception() calls in the finalizer
   don't mis-read the pending exception as caused by their matching
   operation.
2. It implicitly ensures that terminated finally blocks (by a return
   statement) overwrite any pending exceptions, since they will never
   execute the ContinuePendingUnwind operation that restores the
   stashed exception.
This additional logic is required in the JIT (as opposed to the
interpreter), since the JIT uses the exception register to store and
check the possibly-exceptional results from each individual operation,
while the interpreter only modifies it when an operation has thrown an
exception.
2023-11-03 20:27:45 +01:00
..
Compiler.cpp LibJS: Stash thrown exception in a register before executing finalizer 2023-11-03 20:27:45 +01:00
Compiler.h LibJS+LibJIT: Add fast path for Int32 * Int32 2023-11-03 10:48:02 +01:00
NativeExecutable.cpp LibJS/JIT: Support alternative entry point blocks 2023-11-03 07:31:11 +01:00
NativeExecutable.h LibJS/JIT: Support alternative entry point blocks 2023-11-03 07:31:11 +01:00