KOS_OP_PUSH_FINALLY
Style: LABEL. Arg = handler/finally target.
Stack: Pushes FINALLY node and a KosSegment (like PUSH_TRY). Exception dispatch clears the segment before jumping to the finally handler. POP_FINALLY promotes exactly one value to the revealed segment and drops the region’s segment. Node unwind drops the segment when control passes through.
Pushes: KOS_DYN_FINALLY (static extent KOS_EXT_FINALLY) and KosSegment.
Invariants: Extent kind KOS_EXT_FINALLY.
Example: Push finally block. Arg = finally block pc (or extent holds it).
index |
opcode |
arg |
arg view |
comment |
|---|---|---|---|---|
0 |
PUSH_FINALLY |
3 |
3 (-> 3) |
push FINALLY; finally code at 3 |
1 |
… |
… |
… |
protected body |
2 |
POP_FINALLY |
0 |
0 |
normal exit |
3 |
LABEL |
– |
– |
finally block |
4 |
END_FINALLY |
0 |
0 |
(conceptual) |