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.