Transfer of control
In
the procedure division, unless there is an explicit control transfer or
there is no next executable statement, program flow transfers control from
statement to statement in the order in which the statements are written. This
normal program flow is an implicit transfer of control.
In addition to the implicit transfers of control between consecutive
statements, implicit transfer of control also occurs when the normal flow is
altered without the execution of a procedure branching statement. The following
examples show implicit transfers of control, overriding
statement-to-statement transfer of control:
- After execution of the last statement of a procedure that is executed
under control of another COBOL statement, control implicitly transfers.
(COBOL statements that control procedure execution are, for example, MERGE,
PERFORM, SORT, and USE.) Further, if a paragraph is being executed under the
control of a PERFORM statement that causes iterative execution, and that
paragraph is the first paragraph in the range of that PERFORM statement, an
implicit transfer of control occurs between the control mechanism associated
with that PERFORM statement and the first statement in that paragraph for
each iterative execution of the paragraph.
- During SORT or MERGE statement execution, control is implicitly
transferred to an input or output procedure.
- During XML PARSE statement execution, control is implicitly transferred to
a processing procedure.
- During execution of any COBOL statement that causes execution of a
declarative procedure, control is implicitly transferred to that procedure.
- At the end of execution of any declarative procedure, control is
implicitly transferred back to the control mechanism associated with the
statement that caused its execution.
COBOL also provides explicit control transfers through the execution
of any procedure branching, program call, or conditional statement. (Lists of
procedure branching and conditional statements are contained in Statement categories.)
Definition:
The term next executable statement refers to the next COBOL statement
to which control is transferred, according to the rules given above. There is no
next executable statement under the following circumstances:
- When the program contains no procedure division
- Following the last statement in a declarative section when the paragraph
in which it appears is not being executed under the control of some other
COBOL statement
- Following the last statement in a program or method when the paragraph in
which it appears is not being executed under the control of some other COBOL
statement in that program
- Following the last statement in a declarative section when the statement
is in the range of an active PERFORM statement executed in a different
section and this last statement of the declarative section is not also the
last statement of the procedure that is the exit of the active PERFORM
statement
- Following a STOP RUN statement or EXIT PROGRAM statement that transfers
control outside the COBOL program
- Following a GOBACK statement that transfers control outside the COBOL
program
- Following an EXIT METHOD statement that transfers control outside the
COBOL method
- The end program or end method marker
When
there is no next executable statement and control is not transferred outside the
COBOL program, the program flow of control is undefined unless the program
execution is in the nondeclarative procedures portion of a program under control
of a CALL statement, in which case an implicit EXIT PROGRAM statement is
executed.
Similarly, if control reaches the end of the procedure division of a method
and there is no next executable statement, an implicit EXIT METHOD statement is
executed.
|