File: AA-10-1-2.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 (272 lines) | stat: -rw-r--r-- 20,207 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
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
    <TITLE>AARM95 - Context Clauses - With Clauses</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-1.html">Previous</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-10-1-3.html">Next</A></P>
<HR>
<H1> 10.1.2 Context Clauses - With Clauses</H1>
<DIV Class="Paranum"><FONT SIZE=-2>1</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;[A <FONT FACE="Arial, Helvetica">context_clause</FONT>
is used to specify the <FONT FACE="Arial, Helvetica">library_item</FONT>s
whose names are needed within a compilation unit.] </DIV>

<H4 ALIGN=CENTER>Language Design Principles</H4>
<DIV Class="Paranum"><FONT SIZE=-2>1.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><A NAME="I3893"></A>The reader
should be able to understand a <FONT FACE="Arial, Helvetica">context_clause</FONT>
without looking ahead. Similarly, when compiling a <FONT FACE="Arial, Helvetica">context_clause</FONT>,
the compiler should not have to look ahead at subsequent <FONT FACE="Arial, Helvetica">context_item</FONT>s,
nor at the compilation unit to which the <FONT FACE="Arial, Helvetica">context_clause</FONT>
is attached. (We have not completely achieved this.) </FONT></DIV>

<H4 ALIGN=CENTER>Syntax</H4>
<DIV Class="Paranum"><FONT SIZE=-2>2</FONT></DIV>
<DIV Class="SyntaxIndented"><FONT FACE="Arial, Helvetica">context_clause<A NAME="I3894"></A>
::= </FONT>{<A NAME="I3895"></A><FONT FACE="Arial, Helvetica">context_item</FONT>}</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>3</FONT></DIV>
<DIV Class="SyntaxIndented"><FONT FACE="Arial, Helvetica">context_item<A NAME="I3896"></A>
::= </FONT><A NAME="I3897"></A><FONT FACE="Arial, Helvetica">with_clause</FONT>&nbsp;|&nbsp;<A NAME="I3898"></A><FONT FACE="Arial, Helvetica">use_clause</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>4</FONT></DIV>
<DIV Class="SyntaxIndented"><FONT FACE="Arial, Helvetica">with_clause<A NAME="I3899"></A>
::= </FONT><B>with</B>&nbsp;<I>library_unit_</I><A NAME="I3900"></A><FONT FACE="Arial, Helvetica">name</FONT>&nbsp;{,&nbsp;<I>library_unit_</I><A NAME="I3901"></A><FONT FACE="Arial, Helvetica">name</FONT>};</DIV>

<H4 ALIGN=CENTER>Name Resolution Rules</H4>
<DIV Class="Paranum"><FONT SIZE=-2>5</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;<A NAME="I3902"></A>The <I>scope</I> of a <FONT FACE="Arial, Helvetica">with_clause</FONT>
that appears on a <FONT FACE="Arial, Helvetica">library_unit_declaration</FONT>
or <FONT FACE="Arial, Helvetica">library_unit_renaming_declaration</FONT>
consists of the entire declarative region of the declaration[, which
includes all children and subunits]. The scope of a <FONT FACE="Arial, Helvetica">with_clause</FONT>
that appears on a body consists of the body[, which includes all subunits].
</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>5.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Discussion: </B>Suppose a <FONT FACE="Arial, Helvetica">with_clause</FONT>
of a public library unit mentions one of its private siblings. (This
is only allowed on the body of the public library unit.) We considered
making the scope of that <FONT FACE="Arial, Helvetica">with_clause</FONT>
not include the visible part of the public library unit. (This would
only matter for a <FONT FACE="Arial, Helvetica">subprogram_body</FONT>,
since those are the only kinds of body that have a visible part, and
only if the <FONT FACE="Arial, Helvetica">subprogram_body</FONT> completes
a <FONT FACE="Arial, Helvetica">subprogram_declaration</FONT>, since
otherwise the <FONT FACE="Arial, Helvetica">with_clause</FONT> would
be illegal.) We did not put in such a rule for two reasons: (1) It would
complicate the wording of the rules, because we would have to split each
<FONT FACE="Arial, Helvetica">with_clause</FONT> into pieces, in order
to correctly handle ``<B>with</B> P, Q;'' where P is public and Q is
private. (2) The conformance rules prevent any problems. It doesn't matter
if a type name in the spec of the body denotes the completion of a <FONT FACE="Arial, Helvetica">private_type_declaration</FONT>.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>5.b</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>A <FONT FACE="Arial, Helvetica">with_clause</FONT>
also affects visibility within subsequent <FONT FACE="Arial, Helvetica">use_clause</FONT>s
and <FONT FACE="Arial, Helvetica">pragma</FONT>s of the same <FONT FACE="Arial, Helvetica">context_clause</FONT>,
even though those are not in the scope of the <FONT FACE="Arial, Helvetica">with_clause</FONT>.
</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>6</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;<A NAME="I3903"></A><A NAME="I3904"></A>A <FONT FACE="Arial, Helvetica">library_item</FONT>
is <I>mentioned</I> in a <FONT FACE="Arial, Helvetica">with_clause</FONT>
if it is denoted by a <I>library_unit_</I><FONT FACE="Arial, Helvetica">name</FONT>
or a <FONT FACE="Arial, Helvetica">prefix</FONT> in the <FONT FACE="Arial, Helvetica">with_clause</FONT>.
</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>6.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Discussion: </B><FONT FACE="Arial, Helvetica">With_clause</FONT>s
control the visibility of declarations or renamings of library units.
Mentioning a root library unit in a <FONT FACE="Arial, Helvetica">with_clause</FONT>
makes its declaration directly visible. Mentioning a non-root library
unit makes its declaration visible. See Section 8 for details.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>6.b</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>Note that this rule implies that
``<B>with</B> A.B.C;'' is equivalent to ``<B>with</B> A, A.B, A.B.C;''
The reason for making a <FONT FACE="Arial, Helvetica">with_clause</FONT>
apply to all the ancestor units is to avoid ``visibility holes'' -- situations
in which an inner program unit is visible while an outer one is not.
Visibility holes would cause semantic complexity and implementation difficulty.
</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>7</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;[Outside its own declarative region, the declaration
or renaming of a library unit can be visible only within the scope of
a <FONT FACE="Arial, Helvetica">with_clause</FONT> that mentions it.
The visibility of the declaration or renaming of a library unit otherwise
follows from its placement in the environment.] </DIV>

<H4 ALIGN=CENTER>Legality Rules</H4>
<DIV Class="Paranum"><FONT SIZE=-2>8</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;If a <FONT FACE="Arial, Helvetica">with_clause</FONT>
of a given <FONT FACE="Arial, Helvetica">compilation_unit</FONT> mentions
a private child of some library unit, then the given <FONT FACE="Arial, Helvetica">compilation_unit</FONT>
shall be either the declaration of a private descendant of that library
unit or the body or subunit of a [(public or private)] descendant of
that library unit. </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>8.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Reason: </B>The purpose of
this rule is to prevent a private child from being visible (or even semantically
depended-on) from outside the subsystem rooted at its parent. </FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>8.b</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Discussion: </B>This rule violates
the one-pass <FONT FACE="Arial, Helvetica">context_clause</FONT>s Language
Design Principle. We rationalize this by saying that at least that Language
Design Principle works for legal compilation units.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>8.c</FONT></DIV>
<DIV Class="Annotations" Style="margin-bottom: 0.4em"><FONT SIZE=-1>Example:
</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>8.d</FONT></DIV>
<DIV Class="SmallExamples"><TT><B>package</B>&nbsp;A&nbsp;<B>is</B><BR>
<B>end</B>&nbsp;A;</TT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>8.e</FONT></DIV>
<DIV Class="SmallExamples"><TT><B>package</B>&nbsp;A.B&nbsp;<B>is</B><BR>
<B>end</B>&nbsp;A.B;</TT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>8.f</FONT></DIV>
<DIV Class="SmallExamples"><TT><B>private</B>&nbsp;<B>package</B>&nbsp;A.B.C&nbsp;<B>is</B><BR>
<B>end</B>&nbsp;A.B.C;</TT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>8.g</FONT></DIV>
<DIV Class="SmallExamples"><TT><B>package</B>&nbsp;A.B.C.D&nbsp;<B>is</B><BR>
<B>end</B>&nbsp;A.B.C.D;</TT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>8.h</FONT></DIV>
<DIV Class="SmallExamples"><TT><B>with</B>&nbsp;A.B.C;&nbsp;--&nbsp;(1)<BR>
<B>private</B>&nbsp;<B>package</B>&nbsp;A.B.X&nbsp;<B>is</B><BR>
<B>end</B>&nbsp;A.B.X;</TT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>8.i</FONT></DIV>
<DIV Class="SmallExamples"><TT><B>package</B>&nbsp;A.B.Y&nbsp;<B>is</B><BR>
<B>end</B>&nbsp;A.B.Y;</TT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>8.j</FONT></DIV>
<DIV Class="SmallExamples"><TT><B>with</B>&nbsp;A.B.C;&nbsp;--&nbsp;(2)<BR>
<B>package</B>&nbsp;<B>body</B>&nbsp;A.B.Y&nbsp;<B>is</B><BR>
<B>end</B>&nbsp;A.B.Y;</TT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>8.k</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>(1) is OK because it's a private
child of A.B -- it would be illegal if we made A.B.X a public child of
A.B. (2) is OK because it's the body of a child of A.B. It would be illegal
to say ``<B>with</B> A.B.C;'' on any <FONT FACE="Arial, Helvetica">library_item</FONT>
whose name does not start with ``A.B''. Note that mentioning A.B.C.D
in a <FONT FACE="Arial, Helvetica">with_clause</FONT> automatically mentions
A.B.C as well, so ``<B>with</B> A.B.C.D;'' is illegal in the same places
as ``<B>with</B> A.B.C;''. </FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>8.l</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>To be honest: </B>For the purposes
of this rule, if a <FONT FACE="Arial, Helvetica">subprogram_body</FONT>
has no preceding <FONT FACE="Arial, Helvetica">subprogram_declaration</FONT>,
the <FONT FACE="Arial, Helvetica">subprogram_body</FONT> should be considered
a declaration and not a body. Thus, it is illegal for such a <FONT FACE="Arial, Helvetica">subprogram_body</FONT>
to mention one of its siblings in a <FONT FACE="Arial, Helvetica">with_clause</FONT>
if the sibling is a private library unit.</FONT></DIV>
<DIV Class="NotesHeader"><FONT SIZE=-1>NOTES</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>9</FONT></DIV>
<DIV Class="Notes"><FONT SIZE=-1>3&nbsp;&nbsp;A <FONT FACE="Arial, Helvetica">library_item</FONT>
mentioned in a <FONT FACE="Arial, Helvetica">with_clause</FONT> of a
compilation unit is visible within the compilation unit and hence acts
just like an ordinary declaration. Thus, within a compilation unit that
mentions its declaration, the name of a library package can be given
in <FONT FACE="Arial, Helvetica">use_clause</FONT>s and can be used to
form expanded names, a library subprogram can be called, and instances
of a generic library unit can be declared. If a child of a parent generic
package is mentioned in a <FONT FACE="Arial, Helvetica">with_clause</FONT>,
then the corresponding declaration nested within each visible instance
is visible within the compilation unit.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>9.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Ramification: </B>The rules
given for <FONT FACE="Arial, Helvetica">with_clause</FONT>s are such
that the same effect is obtained whether the name of a library unit is
mentioned once or more than once by the applicable <FONT FACE="Arial, Helvetica">with_clause</FONT>s,
or even within a given <FONT FACE="Arial, Helvetica">with_clause</FONT>.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>9.b</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>If a <FONT FACE="Arial, Helvetica">with_clause</FONT>
mentions a <FONT FACE="Arial, Helvetica">library_unit_renaming_declaration</FONT>,
it only ``mentions'' the <FONT FACE="Arial, Helvetica">prefix</FONT>es
appearing explicitly in the <FONT FACE="Arial, Helvetica">with_clause</FONT>
(and the renamed view itself); the <FONT FACE="Arial, Helvetica">with_clause</FONT>
is not defined to mention the ancestors of the renamed entity. Thus,
if X renames Y.Z, then ``with X;'' does not make the declarations of
Y or Z visible. Note that this does not cause the dreaded visibility
holes mentioned above. </FONT></DIV>

<H4 ALIGN=CENTER>Extensions to Ada 83</H4>
<DIV Class="Paranum"><FONT SIZE=-2>9.c</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><A NAME="I3905"></A>The syntax
rule for <FONT FACE="Arial, Helvetica">with_clause</FONT> is modified
to allow expanded name notation.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>9.d</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>A <FONT FACE="Arial, Helvetica">use_clause</FONT>
in a <FONT FACE="Arial, Helvetica">context_clause</FONT> may be for a
package (or type) nested in a library package. </FONT></DIV>

<H4 ALIGN=CENTER>Wording Changes from Ada 83</H4>
<DIV Class="Paranum"><FONT SIZE=-2>9.e</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>The syntax rule for <FONT FACE="Arial, Helvetica">context_clause</FONT>
is modified to more closely reflect the semantics. The Ada 83 syntax
rule implies that the <FONT FACE="Arial, Helvetica">use_clause</FONT>s
that appear immediately after a particular <FONT FACE="Arial, Helvetica">with_clause</FONT>
are somehow attached to that <FONT FACE="Arial, Helvetica">with_clause</FONT>,
which is not true. The new syntax allows a <FONT FACE="Arial, Helvetica">use_clause</FONT>
to appear first, but that is prevented by a textual rule that already
exists in Ada 83.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>9.f</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>The concept of ``scope of a <FONT FACE="Arial, Helvetica">with_clause</FONT>''
(which is a region of text) replaces RM83's notion of ``apply to'' (a
<FONT FACE="Arial, Helvetica">with_clause</FONT> applies to a <FONT FACE="Arial, Helvetica">library_item</FONT>)
The visibility rules are interested in a region of text, not in a set
of compilation units.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>9.g</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>No need to define ``apply to''
for <FONT FACE="Arial, Helvetica">use_clause</FONT>s. Their semantics
are fully covered by the ``scope (of a <FONT FACE="Arial, Helvetica">use_clause</FONT>)''
definition in <A HREF="AA-8-4.html">8.4</A>. </FONT></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-1.html">Previous</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-10-1-3.html">Next</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-TTL.html">Legal</A></P>
</BODY>
</HTML>