5.7 Exit Statements
1
[An exit_statement is
used to complete the execution of an enclosing loop_statement;
the completion is conditional if the exit_statement
includes a condition.]
Syntax
2
exit_statement ::=
exit [
loop_name] [
when condition];
Name Resolution Rules
3
The loop_name,
if any, in an exit_statement shall resolve
to denote a loop_statement.
Legality Rules
4
{apply (to a loop_statement
by an exit_statement)} Each
exit_statement
applies to a
loop_statement; this is
the
loop_statement being exited. An
exit_statement
with a
name is only allowed within the
loop_statement
denoted by the
name, and applies to that
loop_statement.
An
exit_statement without a
name
is only allowed within a
loop_statement, and
applies to the innermost enclosing one. An
exit_statement
that applies to a given
loop_statement shall
not appear within a body or
accept_statement,
if this construct is itself enclosed by the given
loop_statement.
Dynamic Semantics
5
{execution (exit_statement)
[partial]} For the execution of an
exit_statement,
the
condition, if present, is first evaluated.
If the value of the
condition is True, or
if there is no
condition, a transfer of control
is done to complete the
loop_statement. If
the value of the
condition is False, no transfer
of control takes place.
6
9 Several nested loops can be exited by
an exit_statement that names the outer loop.
Examples
7
Examples of loops with exit statements:
8
for N in 1 .. Max_Num_Items loop
Get_New_Item(New_Item);
Merge_Item(New_Item, Storage_File);
exit when New_Item = Terminal_Item;
end loop;
9
Main_Cycle:
loop
-- initial statements
exit Main_Cycle when Found;
-- final statements
end loop Main_Cycle;