File: RM-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 (120 lines) | stat: -rw-r--r-- 10,468 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
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
    <TITLE>Ada95 - 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="RM-TOC.html">Contents</A>&nbsp;&nbsp;&nbsp;<A HREF="RM-0-29.html">Index</A>&nbsp;&nbsp;&nbsp;<A HREF="RM-4-6.html">Previous</A>&nbsp;&nbsp;&nbsp;<A HREF="RM-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="I2698"></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="I2699"></A>
::= </FONT><BR>
&nbsp;&nbsp;&nbsp;<A NAME="I2700"></A><FONT FACE="Arial, Helvetica">subtype_mark</FONT>'(<A NAME="I2701"></A><FONT FACE="Arial, Helvetica">expression</FONT>)&nbsp;|&nbsp;<A NAME="I2702"></A><FONT FACE="Arial, Helvetica">subtype_mark</FONT>'<A NAME="I2703"></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="I2704"></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="I2705"></A><A NAME="I2706"></A><A NAME="I2707"></A><A NAME="I2708"></A><A NAME="I2709"></A><A NAME="I2710"></A><A NAME="I2711"></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="I2712"></A><A NAME="I2713"></A>The exception Constraint_Error
is raised if this check fails. </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="RM-4-6.html">4.6</A>&nbsp;</I></TT></DIV>

<HR>
<P><A HREF="RM-TOC.html">Contents</A>&nbsp;&nbsp;&nbsp;<A HREF="RM-0-29.html">Index</A>&nbsp;&nbsp;&nbsp;<A HREF="RM-4-6.html">Previous</A>&nbsp;&nbsp;&nbsp;<A HREF="RM-4-8.html">Next</A>&nbsp;&nbsp;&nbsp;<A HREF="RM-TTL.html">Legal</A></P>
</BODY>
</HTML>