1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
<TITLE>AARM95 - Pragmas and Program Units</TITLE>
<META NAME="Author" CONTENT="JTC1/SC22/WG9/ARG, by Randall Brukardt, ARG Editor">
<META NAME="GENERATOR" CONTENT="Arm_Form.Exe, Ada Reference Manual generator">
<STYLE type="text/css">
DIV.paranum {position: absolute; font-family: Arial, Helvetica, sans-serif; left: 0.5 em; top: auto}
TT {font-family: "Courier New", monospace}
DT {display: compact}
DIV.Normal {font-family: "Times New Roman", Times, serif; margin-bottom: 0.6em}
DIV.Wide {font-family: "Times New Roman", Times, serif; margin-top: 0.6em; margin-bottom: 0.6em}
DIV.Annotations {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-bottom: 0.6em}
DIV.WideAnnotations {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-top: 0.6em; margin-bottom: 0.6em}
DIV.Index {font-family: "Times New Roman", Times, serif}
DIV.SyntaxSummary {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-bottom: 0.4em}
DIV.Notes {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-bottom: 0.6em}
DIV.NotesHeader {font-family: "Times New Roman", Times, serif; margin-left: 2.0em}
DIV.SyntaxIndented {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-bottom: 0.4em}
DIV.Indented {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-bottom: 0.6em}
DIV.CodeIndented {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-bottom: 0.6em}
DIV.SmallIndented {font-family: "Times New Roman", Times, serif; margin-left: 10.0em; margin-bottom: 0.6em}
DIV.SmallCodeIndented {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-bottom: 0.6em}
DIV.Examples {font-family: "Courier New", monospace; margin-left: 2.0em; margin-bottom: 0.6em}
DIV.SmallExamples {font-family: "Courier New", monospace; font-size: 80%; margin-left: 7.5em; margin-bottom: 0.6em}
DIV.IndentedExamples {font-family: "Courier New", monospace; margin-left: 8.0em; margin-bottom: 0.6em}
DIV.SmallIndentedExamples {font-family: "Courier New", monospace; font-size: 80%; margin-left: 15.0em; margin-bottom: 0.6em}
UL.Bulleted {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-right: 2.0em; margin-top: 0em; margin-bottom: 0.5em}
UL.SmallBulleted {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
UL.NestedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-right: 4.0em; margin-top: 0em; margin-bottom: 0.5em}
UL.SmallNestedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-right: 8.0em; margin-top: 0em; margin-bottom: 0.5em}
UL.IndentedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-right: 8.0em; margin-top: 0em; margin-bottom: 0.5em}
UL.CodeIndentedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
UL.CodeIndentedNestedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-right: 8.0em; margin-top: 0em; margin-bottom: 0.5em}
UL.SyntaxIndentedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-right: 4.0em; margin-top: 0em; margin-bottom: 0.5em}
UL.NotesBulleted {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-right: 4.0em; margin-top: 0em; margin-bottom: 0.5em}
UL.NotesNestedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
DL.Hanging {font-family: "Times New Roman", Times, serif; margin-top: 0em; margin-bottom: 0.6em}
DD.Hanging {margin-left: 6.0em}
DL.IndentedHanging {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-top: 0em; margin-bottom: 0.6em}
DD.IndentedHanging {margin-left: 2.0em}
DL.HangingInBulleted {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-right: 2.0em; margin-top: 0em; margin-bottom: 0.5em}
DD.HangingInBulleted {margin-left: 4.0em}
DL.SmallHanging {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-top: 0em; margin-bottom: 0.6em}
DD.SmallHanging {margin-left: 7.5em}
DL.SmallIndentedHanging {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-top: 0em; margin-bottom: 0.6em}
DD.SmallIndentedHanging {margin-left: 2.0em}
DL.SmallHangingInBulleted {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
DD.SmallHangingInBulleted {margin-left: 5.0em}
DL.Enumerated {font-family: "Times New Roman", Times, serif; margin-right: 0.0em; margin-top: 0em; margin-bottom: 0.5em}
DD.Enumerated {margin-left: 2.0em}
DL.SmallEnumerated {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-right: 4.0em; margin-top: 0em; margin-bottom: 0.5em}
DD.SmallEnumerated {margin-left: 2.5em}
DL.NestedEnumerated {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-right: 2.0em; margin-top: 0em; margin-bottom: 0.5em}
DL.SmallNestedEnumerated {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
</STYLE>
</HEAD>
<BODY TEXT="#000000" BGCOLOR="#FFFFF0" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
<P><A HREF="AA-TOC.html">Contents</A> <A HREF="AA-0-29.html">Index</A> <A HREF="AA-10-1-4.html">Previous</A> <A HREF="AA-10-1-6.html">Next</A></P>
<HR>
<H1> 10.1.5 Pragmas and Program Units</H1>
<DIV Class="Paranum"><FONT SIZE=-2>1</FONT></DIV>
<DIV Class="Normal"> [This subclause discusses pragmas related to program
units, library units, and <FONT FACE="Arial, Helvetica">compilation</FONT>s.]
</DIV>
<H4 ALIGN=CENTER>Name Resolution Rules</H4>
<DIV Class="Paranum"><FONT SIZE=-2>2</FONT></DIV>
<DIV Class="Normal"> <A NAME="I3934"></A><A NAME="I3935"></A>Certain
<FONT FACE="Arial, Helvetica">pragma</FONT>s are defined to be <I>program
unit pragmas</I>. <A NAME="I3936"></A>A <FONT FACE="Arial, Helvetica">name</FONT>
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 <FONT FACE="Arial, Helvetica">compilation</FONT>
in which the <FONT FACE="Arial, Helvetica">pragma</FONT> immediately
occurs, or it shall resolve to denote the declaration of the immediately
enclosing program unit (if any); the <FONT FACE="Arial, Helvetica">pragma</FONT>
applies to the denoted program unit(s). If there are no <FONT FACE="Arial, Helvetica">name</FONT>s
given as arguments, the <FONT FACE="Arial, Helvetica">pragma</FONT> applies
to the immediately enclosing program unit. </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>2.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Ramification: </B>The fact
that this is a Name Resolution Rule means that the <FONT FACE="Arial, Helvetica">pragma</FONT>
will not apply to declarations from outer declarative regions. </FONT></DIV>
<H4 ALIGN=CENTER>Legality Rules</H4>
<DIV Class="Paranum"><FONT SIZE=-2>3</FONT></DIV>
<DIV Class="Normal" Style="margin-bottom: 0.4em"> A program unit pragma
shall appear in one of these places: </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>4</FONT></DIV>
<UL Class="Bulleted"><LI TYPE=DISC>At the place of a <FONT FACE="Arial, Helvetica">compilation_unit</FONT>,
in which case the <FONT FACE="Arial, Helvetica">pragma</FONT> shall immediately
follow in the same <FONT FACE="Arial, Helvetica">compilation</FONT> (except
for other <FONT FACE="Arial, Helvetica">pragma</FONT>s) a <FONT FACE="Arial, Helvetica">library_unit_declaration</FONT>
that is a <FONT FACE="Arial, Helvetica">subprogram_declaration</FONT>,
<FONT FACE="Arial, Helvetica">generic_subprogram_declaration</FONT>,
or <FONT FACE="Arial, Helvetica">generic_instantiation</FONT>, and the
<FONT FACE="Arial, Helvetica">pragma</FONT> shall have an argument that
is a <FONT FACE="Arial, Helvetica">name</FONT> denoting that declaration.
</LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>4.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Ramification: </B>The <FONT FACE="Arial, Helvetica">name</FONT>
has to denote the immediately preceding <FONT FACE="Arial, Helvetica">library_unit_declaration</FONT>.
</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>5/1</FONT></DIV>
<UL Class="Bulleted"><LI TYPE=DISC>{<I><A HREF="defect1.html#8652/0033">8652/0033</A></I>}
Immediately within the declaration of a program unit and before any nested
declaration<U> (but not within a generic formal part)</U>, in which case
the argument, if any, shall be a <FONT FACE="Arial, Helvetica">direct_name</FONT>
that denotes the immediately enclosing program unit declaration. </LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>5.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Ramification: </B>The argument
is optional in this case. </FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>6</FONT></DIV>
<UL Class="Bulleted"><LI TYPE=DISC>At the place of a declaration other than the first, of
a <FONT FACE="Arial, Helvetica">declarative_part</FONT> or program unit
declaration, in which case the <FONT FACE="Arial, Helvetica">pragma</FONT>
shall have an argument, which shall be a <FONT FACE="Arial, Helvetica">direct_name</FONT>
that denotes one or more of the following (and nothing else): a <FONT FACE="Arial, Helvetica">subprogram_declaration</FONT>,
a <FONT FACE="Arial, Helvetica">generic_subprogram_declaration</FONT>,
or a <FONT FACE="Arial, Helvetica">generic_instantiation</FONT>, of the
same <FONT FACE="Arial, Helvetica">declarative_part</FONT> or program
unit declaration. </LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>6.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Ramification: </B>If you want
to denote a <FONT FACE="Arial, Helvetica">subprogram_body</FONT> that
is not a completion, or a <FONT FACE="Arial, Helvetica">package_declaration</FONT>,
for example, you have to put the <FONT FACE="Arial, Helvetica">pragma</FONT>
inside. </FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>7</FONT></DIV>
<DIV Class="Normal"> <A NAME="I3937"></A><A NAME="I3938"></A><A NAME="I3939"></A><A NAME="I3940"></A>Certain
program unit pragmas are defined to be <I>library unit pragmas</I>. The
<FONT FACE="Arial, Helvetica">name</FONT>, if any, in a library unit
pragma shall denote the declaration of a library unit. </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>7.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Ramification: </B>This, together
with the rules for program unit pragmas above, implies that if a library
unit pragma applies to a <FONT FACE="Arial, Helvetica">subprogram_declaration</FONT>
(and similar things), it has to appear immediately after the <FONT FACE="Arial, Helvetica">compilation_unit</FONT>,
whereas if the <FONT FACE="Arial, Helvetica">pragma</FONT> applies to
a <FONT FACE="Arial, Helvetica">package_declaration</FONT>, a <FONT FACE="Arial, Helvetica">subprogram_body</FONT>
that is not a completion (and similar things), it has to appear inside,
as the first <FONT FACE="Arial, Helvetica">declarative_item</FONT>. </FONT></DIV>
<H4 ALIGN=CENTER>Static Semantics</H4>
<DIV Class="Paranum"><FONT SIZE=-2>7.1/1</FONT></DIV>
<DIV Class="Normal"> {<I><A HREF="defect1.html#8652/0034">8652/0034</A></I>}
<U>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.</U> </DIV>
<H4 ALIGN=CENTER>Implementation Advice</H4>
<DIV Class="Paranum"><FONT SIZE=-2>7.2/1</FONT></DIV>
<DIV Class="Normal"> {<I><A HREF="defect1.html#8652/0034">8652/0034</A></I>}
<U>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.</U>
</DIV>
<H4 ALIGN=CENTER>Post-Compilation Rules</H4>
<DIV Class="Paranum"><FONT SIZE=-2>8</FONT></DIV>
<DIV Class="Normal"> <A NAME="I3941"></A><A NAME="I3942"></A>Certain
<FONT FACE="Arial, Helvetica">pragma</FONT>s are defined to be <I>configuration
pragmas</I>; they shall appear before the first <FONT FACE="Arial, Helvetica">compilation_unit</FONT>
of a <FONT FACE="Arial, Helvetica">compilation</FONT>. [They are generally
used to select a partition-wide or system-wide option.] The <FONT FACE="Arial, Helvetica">pragma</FONT>
applies to all <FONT FACE="Arial, Helvetica">compilation_unit</FONT>s
appearing in the <FONT FACE="Arial, Helvetica">compilation</FONT>, unless
there are none, in which case it applies to all future <FONT FACE="Arial, Helvetica">compilation_unit</FONT>s
compiled into the same environment. </DIV>
<H4 ALIGN=CENTER>Implementation Permissions</H4>
<DIV Class="Paranum"><FONT SIZE=-2>9</FONT></DIV>
<DIV Class="Normal"> An implementation may place restrictions on configuration
pragmas, so long as it allows them when the environment contains no <FONT FACE="Arial, Helvetica">library_item</FONT>s
other than those of the predefined environment. </DIV>
<HR>
<P><A HREF="AA-TOC.html">Contents</A> <A HREF="AA-0-29.html">Index</A> <A HREF="AA-10-1-4.html">Previous</A> <A HREF="AA-10-1-6.html">Next</A> <A HREF="AA-TTL.html">Legal</A></P>
</BODY>
</HTML>
|