Contents   Index   Previous   Next

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:
Ramification: The name has to denote the immediately preceding library_unit_declaration.
Ramification: The argument is optional in this case.
Ramification: If you want to denote a subprogram_body that is not a completion, or a package_declaration, for example, you have to put the pragma inside.
   {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.
Ramification: This, together with the rules for program unit pragmas above, implies that if a library unit pragma applies to a subprogram_declaration (and similar things), it has to appear immediately after the compilation_unit, whereas if the pragma applies to a package_declaration, a subprogram_body that is not a completion (and similar things), it has to appear inside, as the first declarative_item.

Static Semantics

       {8652/0034} 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.

Implementation Advice

       {8652/0034} 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.

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

   An implementation may place restrictions on configuration pragmas, so long as it allows them when the environment contains no library_items other than those of the predefined environment.

Contents   Index   Previous   Next   Legal