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> <A HREF="AA-0-29.html">Index</A> <A HREF="AA-10-1-5.html">Previous</A> <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"> [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"> <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"> <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"> <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"> <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> <A HREF="AA-0-29.html">Index</A> <A HREF="AA-10-1-5.html">Previous</A> <A HREF="AA-10-2.html">Next</A> <A HREF="AA-TTL.html">Legal</A></P>
</BODY>
</HTML>
|