Transfers control out of the immediately containing DO-group or the containing DO-group whose label is specified with the statement.
LEAVE [label-reference];
In the following example, the LEAVE statement, shown without a label reference, transfers control directly to the PUT statement if the condition in the IF statement is satisfied.
DO K = 9 TO 91; . . . IF COMMAND = 'QUIT' THEN LEAVE; . . . END; PUT LIST ('Job finished');
In the next example, the LEAVE statement, shown with a label reference, transfers control to the first statement following the END statement that ends LOOP2:
LOOP2: DO WHILE (MORE); . . . LOOP3: DO J = 2 TO 5; . . . IF QUAN(J) > 150 THEN LEAVE LOOP2; END; /* Loop 3 */ . . . END; /* Loop 2 */
The LEAVE statement must be contained within a DO-group and must be in the same block as the DO statement to which it refers.
If the LEAVE statement has a label reference, it must refer to a label on a DO statement that heads a DO-group that contains the LEAVE statement. The LEAVE statement must be in the same block as the labeled DO statement.
The label reference cannot be a label variable or a subscripted label constant.
Description
The LEAVE statement transfers control out of the immediately containing DO-group or the containing DO-group whose label is specified with the statement.
Execution of a LEAVE statement with no label reference transfers control to the first statement following the END statement that ends the immediately controlling DO-group. If the LEAVE statement has a label, control is passed to the first executable statement after the END statement for the corresponding DO label indicated in the LEAVE statement. In this manner, the LEAVE statement serves as an alternate means to end the execution of a DO-group.
A LEAVE statement with a label reference can cause several nested DO-groups to be ended as control transfers outside the referenced DO-group.