10.1.5 Pragmas and Program Units
[This subclause discusses pragmas related to program
units, library units, and
compilations.]
Name Resolution Rules
{program unit pragma
[distributed]} {pragma,
program unit [distributed]} Certain
pragmas
are defined to be
program unit pragmas.
{apply
(to a program unit by a program unit pragma) [partial]} A
name given
as the argument of a program unit pragma shall resolve to denote the
declarations or renamings of one or more program units that occur immediately
within the declarative region or
compilation
in which the
pragma
immediately occurs, or it shall resolve to denote the declaration of
the immediately enclosing program unit (if any); the
pragma
applies to the denoted program unit(s). If there are no
names
given as arguments, the
pragma
applies to the immediately enclosing program unit.
Ramification: The fact that this is a
Name Resolution Rule means that the
pragma
will not apply to declarations from outer declarative regions.
Legality Rules
A program unit pragma
shall appear in one of these places:
{
8652/0033}
{
AI95-00136-01}
Immediately within the visible part of a program unit and before any
nested declaration (but not within a generic formal part), in which case
the argument, if any, shall be a
direct_name
that denotes the immediately enclosing program unit declaration.
Ramification: The argument is optional
in this case.
{library unit pragma
[distributed]} {pragma,
library unit [distributed]} {program
unit pragma (library unit pragmas) [partial]} {pragma,
program unit (library unit pragmas) [partial]} Certain
program unit pragmas are defined to be
library unit pragmas. The
name, if any,
in a library unit pragma shall denote the declaration of a library unit.
Static Semantics
{
8652/0034}
{
AI95-00041-01}
A library unit pragma that applies to a generic unit does not apply to
its instances, unless a specific rule for the pragma specifies the contrary.
Post-Compilation Rules
{configuration pragma
[distributed]} {pragma,
configuration [distributed]} Certain
pragmas
are defined to be
configuration pragmas; they shall appear before
the first
compilation_unit
of a
compilation.
[They are generally used to select a partition-wide or system-wide option.]
The
pragma
applies to all
compilation_units
appearing in the
compilation,
unless there are none, in which case it applies to all future
compilation_units
compiled into the same environment.
Implementation Permissions
{
AI95-00212-01}
An implementation may require that configuration pragmas that select
partition-wide or system-wide options be compiled when the environment
contains no
library_items
other than those of the predefined environment. In this case, the implementation
shall still accept configuration pragmas in individual compilations that
confirm the initially selected partition-wide or system-wide options.
Implementation Advice
{
8652/0034}
{
AI95-00041-01}
When applied to a generic unit, a program unit pragma that is not a library
unit pragma should apply to each instance of the generic unit for which
there is not an overriding pragma applied directly to the instance.
Implementation Advice: When applied to
a generic unit, a program unit pragma that is not a library unit pragma
should apply to each instance of the generic unit for which there is
not an overriding pragma applied directly to the instance.
Wording Changes from Ada 95
{
8652/0033}
{
AI95-00136-01}
Corrigendum: The wording was corrected to ensure that a program
unit pragma cannot appear in private parts or generic formal parts.
{
8652/0034}
{
AI95-00041-01}
Corrigendum: The wording was clarified to explain the meaning
of program unit and library unit pragmas in generic units.
The Implementation Advice added by the Corrigendum
was moved, as it was not in the normal order. (This changes the paragraph
number.) It originally was directly after the new Static Semantics rule.
{
AI95-00212-01}
The permission to place restrictions was clarified to:
Ensure that it applies only to partition-wide
configuration pragmas, not ones like Assertion_Policy (see
11.4.2),
which can be different in different units; and
Ensure that confirming pragmas are always
allowed.