JOB_STACKFRAME_CATCH stackframes in context look as follows:
job_RunState.l -> size in bytes of below stackframe JOB_STACKFRAME_CATCH saved catch tag saved job_RunState.s (after catch args popped) pc to resume execution at (after catching error) size in bytes of above stackframe size in bytes of below stackframe JOB_STACKFRAME_CATCH saved catch tag saved job_RunState.s (after catch args popped) pc to resume execution at (after catching error) size in bytes of above stackframe size in bytes of below stackframe JOB_STACKFRAME_NORMAL local_variable_N ... local_variable_1 job_RunState.v -> local_variable_0 compiledFunction for this frame. programCounter for this frame. size in bytes of above stackframe
(An errset just uses a CATCH with a tag of the loopstack itself -- a value user code should never be able to directly access.)
We show two CATCH frames here only to emphasize that they can be nested without needing one NORMAL frame each. This is also true of all following stackframe types.
Rationale:
A full getStackframe[
CATCH frame result looks like:
:owner object :kind :catch :programCounter fixnum :stack-depth fixnum :tag symbol
Go to the first, previous, next, last section, table of contents.