File: AA-4-7.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 (133 lines) | stat: -rw-r--r-- 11,322 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
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
    <TITLE>AARM95 - Qualified Expressions</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-4-6.html">Previous</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-4-8.html">Next</A></P>
<HR>
<H1> 4.7 Qualified Expressions</H1>
<DIV Class="Paranum"><FONT SIZE=-2>1</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;[A <FONT FACE="Arial, Helvetica">qualified_expression</FONT>
is used to state explicitly the type, and to verify the subtype, of an
operand that is either an <FONT FACE="Arial, Helvetica">expression</FONT>
or an <FONT FACE="Arial, Helvetica">aggregate</FONT>. <A NAME="I2815"></A>]</DIV>

<H4 ALIGN=CENTER>Syntax</H4>
<DIV Class="Paranum"><FONT SIZE=-2>2</FONT></DIV>
<DIV Class="SyntaxIndented"><FONT FACE="Arial, Helvetica">qualified_expression<A NAME="I2816"></A>
::= </FONT><BR>
&nbsp;&nbsp;&nbsp;<A NAME="I2817"></A><FONT FACE="Arial, Helvetica">subtype_mark</FONT>'(<A NAME="I2818"></A><FONT FACE="Arial, Helvetica">expression</FONT>)&nbsp;|&nbsp;<A NAME="I2819"></A><FONT FACE="Arial, Helvetica">subtype_mark</FONT>'<A NAME="I2820"></A><FONT FACE="Arial, Helvetica">aggregate</FONT></DIV>

<H4 ALIGN=CENTER>Name Resolution Rules</H4>
<DIV Class="Paranum"><FONT SIZE=-2>3</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;<A NAME="I2821"></A>The <I>operand</I> (the <FONT FACE="Arial, Helvetica">expression</FONT>
or <FONT FACE="Arial, Helvetica">aggregate</FONT>) shall resolve to be
of the type determined by the <FONT FACE="Arial, Helvetica">subtype_mark</FONT>,
or a universal type that covers it. </DIV>

<H4 ALIGN=CENTER>Dynamic Semantics</H4>
<DIV Class="Paranum"><FONT SIZE=-2>4</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;<A NAME="I2822"></A><A NAME="I2823"></A><A NAME="I2824"></A><A NAME="I2825"></A><A NAME="I2826"></A><A NAME="I2827"></A><A NAME="I2828"></A>The
evaluation of a <FONT FACE="Arial, Helvetica">qualified_expression</FONT>
evaluates the operand (and if of a universal type, converts it to the
type determined by the <FONT FACE="Arial, Helvetica">subtype_mark</FONT>)
and checks that its value belongs to the subtype denoted by the <FONT FACE="Arial, Helvetica">subtype_mark</FONT>.
<A NAME="I2829"></A><A NAME="I2830"></A>The exception Constraint_Error
is raised if this check fails. </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>4.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Ramification: </B>This is one
of the few contexts in Ada 95 where implicit subtype conversion is not
performed prior to a constraint check, and hence no ``sliding'' of array
bounds is provided. </FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>4.b</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Reason: </B>Implicit subtype
conversion is not provided because a <FONT FACE="Arial, Helvetica">qualified_expression</FONT>
with a constrained target subtype is essentially an assertion about the
subtype of the operand, rather than a request for conversion. An explicit
<FONT FACE="Arial, Helvetica">type_conversion</FONT> can be used rather
than a <FONT FACE="Arial, Helvetica">qualified_expression</FONT> if subtype
conversion is desired. </FONT></DIV>
<DIV Class="NotesHeader"><FONT SIZE=-1>NOTES</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>5</FONT></DIV>
<DIV Class="Notes"><FONT SIZE=-1>23&nbsp;&nbsp;When a given context does
not uniquely identify an expected type, a <FONT FACE="Arial, Helvetica">qualified_expression</FONT>
can be used to do so. In particular, if an overloaded <FONT FACE="Arial, Helvetica">name</FONT>
or <FONT FACE="Arial, Helvetica">aggregate</FONT> is passed to an overloaded
subprogram, it might be necessary to qualify the operand to resolve its
type. </FONT></DIV>

<H4 ALIGN=CENTER>Examples</H4>
<DIV Class="Paranum"><FONT SIZE=-2>6</FONT></DIV>
<DIV Class="Normal" Style="margin-bottom: 0.4em">&nbsp;&nbsp;&nbsp;<I>Examples of disambiguating
expressions using qualification:</I> </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>7</FONT></DIV>
<DIV Class="Examples"><TT><B>type</B>&nbsp;Mask&nbsp;<B>is</B>&nbsp;(Fix,&nbsp;Dec,&nbsp;Exp,&nbsp;Signif);<BR>
<B>type</B>&nbsp;Code&nbsp;<B>is</B>&nbsp;(Fix,&nbsp;Cla,&nbsp;Dec,&nbsp;Tnz,&nbsp;Sub);</TT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>8</FONT></DIV>
<DIV Class="Examples"><TT>Print&nbsp;(Mask'(Dec));&nbsp;&nbsp;<I>--&nbsp;&nbsp;Dec&nbsp;is&nbsp;of&nbsp;type&nbsp;Mask</I><BR>
Print&nbsp;(Code'(Dec));&nbsp;&nbsp;<I>--&nbsp;&nbsp;Dec&nbsp;is&nbsp;of&nbsp;type&nbsp;Code&nbsp;</I></TT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>9</FONT></DIV>
<DIV Class="Examples"><TT><B>for</B>&nbsp;J&nbsp;<B>in</B>&nbsp;Code'(Fix)&nbsp;..&nbsp;Code'(Dec)&nbsp;<B>loop</B>&nbsp;...&nbsp;<I>--&nbsp;qualification&nbsp;needed&nbsp;for&nbsp;either&nbsp;Fix&nbsp;or&nbsp;Dec</I><BR>
<B>for</B>&nbsp;J&nbsp;<B>in</B>&nbsp;Code&nbsp;<B>range</B>&nbsp;Fix&nbsp;..&nbsp;Dec&nbsp;<B>loop</B>&nbsp;...&nbsp;&nbsp;&nbsp;&nbsp;<I>--&nbsp;qualification&nbsp;unnecessary</I><BR>
<B>for</B>&nbsp;J&nbsp;<B>in</B>&nbsp;Code'(Fix)&nbsp;..&nbsp;Dec&nbsp;<B>loop</B>&nbsp;...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>--&nbsp;qualification&nbsp;unnecessary&nbsp;for&nbsp;Dec</I></TT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>10</FONT></DIV>
<DIV Class="Examples"><TT>Dozen'(1&nbsp;|&nbsp;3&nbsp;|&nbsp;5&nbsp;|&nbsp;7&nbsp;=&gt;&nbsp;2,&nbsp;<B>others</B>&nbsp;=&gt;&nbsp;0)&nbsp;<I>--&nbsp;see&nbsp;<A HREF="AA-4-6.html">4.6</A>&nbsp;</I></TT></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-4-6.html">Previous</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-4-8.html">Next</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-TTL.html">Legal</A></P>
</BODY>
</HTML>