Exception occurs in PL/I
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
- If no condition handler moves the resume cursor and issued a resume, Language Environment terminates the thread.