Overlapping PERFORM...THRU...EXIT

0 Likes
over 6 years ago

Problem:

My program appears to be losing its ability to perform thru exit. It falls to the next para instead of returning to the location where it was performed from. .

Resolution:

This customer's program presumably has some mainframe heritage, and was coded in such a way as to rely on implementation-specific behaviour that the mainframe gives. 

Fortunately we can emulate this behavior using the checker directive PERFORM-TYPE(OSVS).

It specifies the behavior of return jumps from nested PERFORM statements.

PERFORM-TYPE"OSVS" provides compatibility with the mainframe behavior of OS/VS COBOL and DOS/VS COBOL.

The following program demonstrates having an inner PERFORM (paragraph TESTER) fall into a new SECTION instead of returning to the controlling SECTION: 

       IDENTIFICATION DIVISION.
       PROGRAM-ID. PROGRAM1.
       ENVIRONMENT DIVISION.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01  COUNTER           PIC 9       VALUE 0.
       01  SUB               PIC 9.

       PROCEDURE DIVISION.
       MAIN SECTION.
       BEGIN.
           PERFORM PROCESS
           DISPLAY "NORMAL TERMINATION"
           STOP RUN.
     
       PROCESS SECTION.
           DISPLAY "STARTING PROCESS SECTION".

       PROCESS-LOOP.
           PERFORM TESTER VARYING SUB FROM 1 BY 1 UNTIL SUB >= 10
           GO TO PROCESS-EXIT.     
       TESTER.
           IF (COUNTER = 6) 
               GO TO PROCESS-EXIT
           ELSE 
               ADD 1 TO COUNTER
           END-IF.
       PROCESS-EXIT.
           EXIT.
     
       FALL-THROUGH SECTION.
       ALERT.
           DISPLAY "*** FALL THROUGH CODE ***"
           STOP RUN.
       END PROGRAM PROGRAM1.


The program falls through when compiled using cob -vug Program1.cbl 
[support@rhsupv2 100500]$ cobrun Program1
STARTING PROCESS SECTION
*** FALL THROUGH CODE ***

The program succeeds when compiled using cob -vug demo.cbl  -C'PERFORM-TYPE(OSVS)'
[support@rhsupv2 100500]$ cobrun Program1
STARTING PROCESS SECTION
NORMAL TERMINATION
Comment List
Anonymous
Related Discussions
Recommended