Contents   Index   Previous   Next


5.6 Block Statements

1
   [A block_statement encloses a handled_sequence_of_statements optionally preceded by a declarative_part.]

Syntax

2
block_statement ::=
   [block_statement_identifier:]
       [declare
            declarative_part]
        begin
            handled_sequence_of_statements
        end [block_identifier];
3
If a block_statement has a block_statement_identifier, then the identifier shall be repeated after the end; otherwise, there shall not be an identifier after the end.

Static Semantics

4
   A block_statement that has no explicit declarative_part has an implicit empty declarative_part.
4.a
Ramification: Thus, other rules can always refer to the declarative_part of a block_statement.

Dynamic Semantics

5
   {execution (block_statement) [partial]} The execution of a block_statement consists of the elaboration of its declarative_part followed by the execution of its handled_sequence_of_statements.

Examples

6
   Example of a block statement with a local variable:
7
Swap:
   declare
      Temp : Integer;
   begin
      Temp := V; V := U; U := Temp;
   end Swap;
7.a
Ramification: If task objects are declared within a block_statement whose execution is completed, the block_statement is not left until all its dependent tasks are terminated (see 7.6). This rule applies to completion caused by a transfer of control.
7.b
Within a block_statement, the block name can be used in expanded names denoting local entities such as Swap.Temp in the above example (see 4.1.3).

Wording Changes from Ada 83

7.c
The syntax rule for block_statement now uses the syntactic category handled_sequence_of_statements.

Contents   Index   Previous   Next   Legal