Go to the first, previous, next, last section, table of contents.
Static Semantics
-
For each of the following constructs, there is a portion of the program
text called its declarative region, within which nested declarations can
occur:
-
any declaration, other than that of an enumeration type, that is not a
completion of a previous declaration;
-
a block_statement;
-
a loop_statement;
-
an accept_statement;
-
an exception_handler.
-
The declarative region includes the text of the construct together with
additional text determined (recursively), as follows:
-
If a declaration is included, so is its completion, if any.
-
If the declaration of a library unit (including Standard --
See section 10.1.1 Compilation Units - Library Units, is included, so are the declarations of any child units
(and their completions, by the previous rule). The child declarations
occur after the declaration.
-
If a body_stub is included, so is the corresponding subunit.
-
If a type_declaration is included, then so is a corresponding
record_representation_clause, if any.
-
The declarative region of a declaration is also called the declarative
region of any view or entity declared by the declaration.
-
A declaration occurs immediately within a declarative region if this
region is the innermost declarative region that encloses the declaration
(the immediately enclosing declarative region), not counting the
declarative region (if any) associated with the declaration itself.
-
A declaration is local to a declarative region if the declaration occurs
immediately within the declarative region. An entity is local to a
declarative region if the entity is declared by a declaration that is
local to the declarative region.
-
A declaration is global to a declarative region if the declaration
occurs immediately within another declarative region that encloses the
declarative region. An entity is global to a declarative region if the
entity is declared by a declaration that is global to the declarative
region.
NOTES
-
(1) The children of a parent library unit are inside the parent's
declarative region, even though they do not occur inside the parent's
declaration or body. This implies that one can use (for example) "P.Q"
to refer to a child of P whose defining name is Q, and that after "use
P;" Q can refer (directly) to that child.
-
(2) As explained above and in See section 10.1.1 Compilation Units - Library Units, all library units are descendants of Standard, and so
are contained in the declarative region of Standard. They are not inside
the declaration or body of Standard, but they are inside its declarative
region.
-
(3) For a declarative region that comes in multiple parts, the text of
the declarative region does not contain any text that might appear
between the parts. Thus, when a portion of a declarative region is said
to extend from one place to another in the declarative region, the
portion does not contain any text that might appear between the parts of
the declarative region.
Go to the first, previous, next, last section, table of contents.