File: AA-10-1-6.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 (175 lines) | stat: -rw-r--r-- 13,384 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
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
    <TITLE>AARM95 - Environment-Level Visibility Rules</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-5.html">Previous</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-10-2.html">Next</A></P>
<HR>
<H1> 10.1.6 Environment-Level Visibility Rules</H1>
<DIV Class="Paranum"><FONT SIZE=-2>1</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;[The normal visibility rules do not apply within
a <FONT FACE="Arial, Helvetica">parent_unit_name</FONT> or a <FONT FACE="Arial, Helvetica">context_clause</FONT>,
nor within a <FONT FACE="Arial, Helvetica">pragma</FONT> that appears
at the place of a compilation unit. The special visibility rules for
those contexts are given here.] </DIV>

<H4 ALIGN=CENTER>Static Semantics</H4>
<DIV Class="Paranum"><FONT SIZE=-2>2</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;<A NAME="I3943"></A><A NAME="I3944"></A><A NAME="I3945"></A><A NAME="I3946"></A>Within
the <FONT FACE="Arial, Helvetica">parent_unit_name</FONT> at the beginning
of a <FONT FACE="Arial, Helvetica">library_item</FONT>, and within a
<FONT FACE="Arial, Helvetica">with_clause</FONT>, the only declarations
that are visible are those that are <FONT FACE="Arial, Helvetica">library_item</FONT>s
of the environment, and the only declarations that are directly visible
are those that are root <FONT FACE="Arial, Helvetica">library_item</FONT>s
of the environment. <A NAME="I3947"></A>Notwithstanding the rules of
<A HREF="AA-4-1-3.html">4.1.3</A>, an expanded name in a <FONT FACE="Arial, Helvetica">with_clause</FONT>
may consist of a <FONT FACE="Arial, Helvetica">prefix</FONT> that denotes
a generic package and a <FONT FACE="Arial, Helvetica">selector_name</FONT>
that denotes a child of that generic package. [(The child is necessarily
a generic unit; see <A HREF="AA-10-1-1.html">10.1.1</A>.)]</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>2.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Ramification: </B>In ``<B>package</B>
P.Q.R <B>is</B> ... <B>end</B> P.Q.R;'', this rule requires P to be a
root library unit, and Q to be a library unit (because those are the
things that are directly visible and visible). Note that visibility does
not apply between the ``<B>end</B>'' and the ``;''.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>2.b</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>Physically nested declarations
are not visible at these places. </FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>2.c</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Reason: </B>Although Standard
is visible at these places, it is impossible to name it, since it is
not directly visible, and it has no parent. </FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>2.d</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Reason: </B>The ``notwithstanding''
part allows ``<B>with</B> A.B;'' where A is a generic library package
and B is one of its (generic) children. This is necessary because it
is not normally legal to use an expanded name to reach inside a generic
package.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>3</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;<A NAME="I3948"></A><A NAME="I3949"></A><A NAME="I3950"></A><A NAME="I3951"></A>Within
a <FONT FACE="Arial, Helvetica">use_clause</FONT> or <FONT FACE="Arial, Helvetica">pragma</FONT>
that is within a <FONT FACE="Arial, Helvetica">context_clause</FONT>,
each <FONT FACE="Arial, Helvetica">library_item</FONT> mentioned in a
previous <FONT FACE="Arial, Helvetica">with_clause</FONT> of the same
<FONT FACE="Arial, Helvetica">context_clause</FONT> is visible, and each
root <FONT FACE="Arial, Helvetica">library_item</FONT> so mentioned is
directly visible. In addition, within such a <FONT FACE="Arial, Helvetica">use_clause</FONT>,
if a given declaration is visible or directly visible, each declaration
that occurs immediately within the given declaration's visible part is
also visible. No other declarations are visible or directly visible.
</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>3.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Discussion: </B>Note the word
``same''. For example, if a <FONT FACE="Arial, Helvetica">with_clause</FONT>
on a declaration mentions X, this does not make X visible in <FONT FACE="Arial, Helvetica">use_clause</FONT>s
and <FONT FACE="Arial, Helvetica">pragma</FONT>s that are on the body.
The reason for this rule is the one-pass <FONT FACE="Arial, Helvetica">context_clause</FONT>s
Language Design Principle.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>3.b</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>Note that the second part of the
rule does not mention <FONT FACE="Arial, Helvetica">pragma</FONT>s. </FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>4</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;<A NAME="I3952"></A><A NAME="I3953"></A>Within
the <FONT FACE="Arial, Helvetica">parent_unit_name</FONT> of a subunit,
<FONT FACE="Arial, Helvetica">library_item</FONT>s are visible as they
are in the <FONT FACE="Arial, Helvetica">parent_unit_name</FONT> of a
<FONT FACE="Arial, Helvetica">library_item</FONT>; in addition, the declaration
corresponding to each <FONT FACE="Arial, Helvetica">body_stub</FONT>
in the environment is also visible. </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>4.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Ramification: </B>For a subprogram
without a separate <FONT FACE="Arial, Helvetica">subprogram_declaration</FONT>,
the <FONT FACE="Arial, Helvetica">body_stub</FONT> itself is the declaration.
</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>5</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;<A NAME="I3954"></A><A NAME="I3955"></A>Within
a <FONT FACE="Arial, Helvetica">pragma</FONT> that appears at the place
of a compilation unit, the immediately preceding <FONT FACE="Arial, Helvetica">library_item</FONT>
and each of its ancestors is visible. The ancestor root <FONT FACE="Arial, Helvetica">library_item</FONT>
is directly visible.</DIV>

<H4 ALIGN=CENTER>Wording Changes from Ada 83</H4>
<DIV Class="Paranum"><FONT SIZE=-2>5.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>The special visibility rules that
apply within a <FONT FACE="Arial, Helvetica">parent_unit_name</FONT>
or a <FONT FACE="Arial, Helvetica">context_clause</FONT>, and within
a <FONT FACE="Arial, Helvetica">pragma</FONT> that appears at the place
of a <FONT FACE="Arial, Helvetica">compilation_unit</FONT> are clarified.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>5.b</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>Note that a <FONT FACE="Arial, Helvetica">context_clause</FONT>
is not part of any declarative region.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>5.c</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>We considered making the visibility
rules within <FONT FACE="Arial, Helvetica">parent_unit_name</FONT>s and
<FONT FACE="Arial, Helvetica">context_clause</FONT>s follow from the
context of compilation. However, this attempt failed for various reasons.
For example, it would require <FONT FACE="Arial, Helvetica">use_clause</FONT>s
in <FONT FACE="Arial, Helvetica">context_clause</FONT>s to be within
the declarative region of Standard, which sounds suspiciously like a
kludge. And we would still need a special rule to prevent seeing things
(in our own <FONT FACE="Arial, Helvetica">context_clause</FONT>) that
were with-ed by our parent, etc. </FONT></DIV>
<P><BR><BR></P>
<HR>
<P><BR></P>

<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-5.html">Previous</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-10-2.html">Next</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-TTL.html">Legal</A></P>
</BODY>
</HTML>