mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 02:37:42 +00:00
![]() 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. |
||
---|---|---|
.. | ||
Compiler.cpp | ||
Compiler.h | ||
NativeExecutable.cpp | ||
NativeExecutable.h |