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 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.

  1. 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.
  2. 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.
  3. 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.
  4. 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.

  5. 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.