File: AA-10-1-5.html

package info (click to toggle)
ada-reference-manual 20021112web-3
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k, lenny, sarge
  • size: 18,652 kB
  • ctags: 8,921
  • sloc: makefile: 52; sh: 20
file content (182 lines) | stat: -rw-r--r-- 13,942 bytes parent folder | download
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>&nbsp;&nbsp;&nbsp;<A HREF="AA-0-29.html">Index</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-10-1-4.html">Previous</A>&nbsp;&nbsp;&nbsp;<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">&nbsp;&nbsp;&nbsp;[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">&nbsp;&nbsp;&nbsp;<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">&nbsp;&nbsp;&nbsp;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">&nbsp;&nbsp;&nbsp;<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">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<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">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<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">&nbsp;&nbsp;&nbsp;<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">&nbsp;&nbsp;&nbsp;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>&nbsp;&nbsp;&nbsp;<A HREF="AA-0-29.html">Index</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-10-1-4.html">Previous</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-10-1-6.html">Next</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-TTL.html">Legal</A></P>
</BODY>
</HTML>