The key C function that powers both tryCatch()
and withCallingHandlers()
is do_addCondHands()
. It creates handler object with mkHandlerEntry()
then stores in the handler stack for the current frame. (More precisely it writes to R_HandlerStack
, a global variable that is an alias to c->handlerstack
)
The five R arguments to do_addCondHands()
are classes
, handlers
, parentenv
, target
, and calling
. These are combined with a result
object (a list of length 4, returned by the exiting handler to doTryCatch()
) to create the handler objects which have five components:
- The
class
, accessed with ENTRY_CLASS(e)
. A string given a class name;
the handler will match all conditions that contain this component in their
class vector.