This scenario describes the behavior of an application that contains
a PL/I and
a COBOL routine.
Refer to Figure 1 throughout the following
discussion. In this scenario, a COBOL main program invokes a PL/I subroutine.
An exception occurs in the PL/I subroutine.
Figure 1. Stack contents when the exception
occurs in PL/I
The actions taken follow the three Language Environment condition
handling steps: enablement, condition, and termination imminent.
- In the enablement step, PL/I determines
if the exception that occurred should be handled as a condition according
to the PL/I rules
of enablement.
- If the exception is to be ignored, control is returned to the
next sequential instruction after where the exception occurred.
- If the exception is to be enabled and processed as a condition,
the condition handling step takes place.
- Is a user-written condition handler has been registered on the PL/I stack
frame using CEEHDLR, it is given control. If it issues a resume, the
condition handling step ends. Processing continues in the routine
at the point where the resume cursor points. In this example, no user-written
condition handler is registered for the condition, so the condition
is percolated.
- If an ON-unit has been established for the condition being processed
on the PL/I stack
frame, it is given control. If it issues a GOTO out-of-block, the
condition handling step ends. Execution resumes at the label of the
GOTO. In this example, no ON-unit is established for the condition,
so the condition is percolated.
- If a user-written condition handler registered using CEEHDLR is
present on the COBOL stack frame, it is given control. (User-written
condition handlers written in COBOL must
be compiled with COBOL/370, COBOL for MVS & VM, COBOL for OS/390 & VM, or Enterprise COBOL for z/OS.)
If it successfully issues a resume, with or without moving the resume
cursor, the condition handling step ends. Processing continues in
the routine to which the resume cursor points. Note that you must
be careful when moving the resume cursor in an application that contains
a COBOL program. See GOTO out-of-block and move resume cursor for details.
In this example, there is not a user-written condition handler
registered for the condition, so the condition is percolated.
- What happens next depends on whether the condition is promotable
to the PL/I ERROR
condition. The following can happen:
- If the condition is not promotable to the PL/I ERROR
condition, then the Language Environment default
actions take place, as described in Table 1. Condition handling
ends.
- If the PL/I default
action for the condition is to promote it to the PL/I ERROR
condition, The condition is promoted, and another pass is made of
the stack to look for ERROR ON-units or user-written condition handlers.
If an ERROR ON-unit or user-written condition handler is found, it
is invoked.
- If either of the following occurs:
- An ERROR ON-unit or user-written condition handler is found, but
it does not issue a GOTO out-of-block or similar construct
- No ERROR ON-unit or user-written condition handler is found
then the ERROR condition is promoted to T_I_U (Termination Imminent
due to an Unhandled condition). Condition handling now enters the
termination imminent step. Because T_I_U maps to the PL/I FINISH
condition, both FINISH ON-units and user-written condition handlers
can be run if the stack frames in which they are established are reached.
- If no condition handler moves the resume cursor and issued a resume, Language Environment terminates
the thread.