Go to the first, previous, next, last section, table of contents.


JOB_STACKFRAME_CATCH

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.