File: RM-4-3-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 (159 lines) | stat: -rw-r--r-- 12,734 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
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
    <TITLE>Ada95 - Extension Aggregates</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-3-1.html">Previous</A>&nbsp;&nbsp;&nbsp;<A HREF="RM-4-3-3.html">Next</A></P>
<HR>
<H1> 4.3.2 Extension Aggregates</H1>
<DIV Class="Paranum"><FONT SIZE=-2>1</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;An <FONT FACE="Arial, Helvetica">extension_aggregate</FONT>
specifies a value for a type that is a record extension by specifying
a value or subtype for an ancestor of the type, followed by associations
for any components not determined by the <FONT FACE="Arial, Helvetica">ancestor_part</FONT>.
</DIV>

<H4 ALIGN=CENTER>Syntax</H4>
<DIV Class="Paranum"><FONT SIZE=-2>2</FONT></DIV>
<DIV Class="SyntaxIndented"><FONT FACE="Arial, Helvetica">extension_aggregate<A NAME="I2283"></A>
::= </FONT><BR>
&nbsp;&nbsp;&nbsp;&nbsp;(<A NAME="I2284"></A><FONT FACE="Arial, Helvetica">ancestor_part</FONT>&nbsp;<B>with</B>&nbsp;<A NAME="I2285"></A><FONT FACE="Arial, Helvetica">record_component_association_list</FONT>)</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>3</FONT></DIV>
<DIV Class="SyntaxIndented"><FONT FACE="Arial, Helvetica">ancestor_part<A NAME="I2286"></A>
::= </FONT><A NAME="I2287"></A><FONT FACE="Arial, Helvetica">expression</FONT>&nbsp;|&nbsp;<A NAME="I2288"></A><FONT FACE="Arial, Helvetica">subtype_mark</FONT></DIV>

<H4 ALIGN=CENTER>Name Resolution Rules</H4>
<DIV Class="Paranum"><FONT SIZE=-2>4</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;<A NAME="I2289"></A>The expected type for an <FONT FACE="Arial, Helvetica">extension_aggregate</FONT>
shall be a single nonlimited type that is a record extension. <A NAME="I2290"></A>If
the <FONT FACE="Arial, Helvetica">ancestor_part</FONT> is an <FONT FACE="Arial, Helvetica">expression</FONT>,
it is expected to be of any nonlimited tagged type. </DIV>

<H4 ALIGN=CENTER>Legality Rules</H4>
<DIV Class="Paranum"><FONT SIZE=-2>5</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;If the <FONT FACE="Arial, Helvetica">ancestor_part</FONT>
is a <FONT FACE="Arial, Helvetica">subtype_mark</FONT>, it shall denote
a specific tagged subtype. The type of the <FONT FACE="Arial, Helvetica">extension_aggregate</FONT>
shall be derived from the type of the <FONT FACE="Arial, Helvetica">ancestor_part</FONT>,
through one or more record extensions (and no private extensions). </DIV>

<H4 ALIGN=CENTER>Static Semantics</H4>
<DIV Class="Paranum"><FONT SIZE=-2>6</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;<A NAME="I2291"></A>For the <FONT FACE="Arial, Helvetica">record_component_association_list</FONT>
of an <FONT FACE="Arial, Helvetica">extension_aggregate</FONT>, the only
components <I>needed</I> are those of the composite value defined by
the aggregate that are not inherited from the type of the <FONT FACE="Arial, Helvetica">ancestor_part</FONT>,
plus any inherited discriminants if the <FONT FACE="Arial, Helvetica">ancestor_part</FONT>
is a <FONT FACE="Arial, Helvetica">subtype_mark</FONT> that denotes an
unconstrained subtype. </DIV>

<H4 ALIGN=CENTER>Dynamic Semantics</H4>
<DIV Class="Paranum"><FONT SIZE=-2>7</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;<A NAME="I2292"></A>For the evaluation of an <FONT FACE="Arial, Helvetica">extension_aggregate</FONT>,
the <FONT FACE="Arial, Helvetica">record_component_association_list</FONT>
is evaluated. If the <FONT FACE="Arial, Helvetica">ancestor_part</FONT>
is an <FONT FACE="Arial, Helvetica">expression</FONT>, it is also evaluated;
if the <FONT FACE="Arial, Helvetica">ancestor_part</FONT> is a <FONT FACE="Arial, Helvetica">subtype_mark</FONT>,
the components of the value of the aggregate not given by the <FONT FACE="Arial, Helvetica">record_component_association_list</FONT>
are initialized by default as for an object of the ancestor type. Any
implicit initializations or evaluations are performed in an arbitrary
order, except that the <FONT FACE="Arial, Helvetica">expression</FONT>
for a discriminant is evaluated prior to any other evaluation or initialization
that depends on it.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>8</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;<A NAME="I2293"></A><A NAME="I2294"></A>If the
type of the <FONT FACE="Arial, Helvetica">ancestor_part</FONT> has discriminants
that are not inherited by the type of the <FONT FACE="Arial, Helvetica">extension_aggregate</FONT>,
then, unless the <FONT FACE="Arial, Helvetica">ancestor_part</FONT> is
a <FONT FACE="Arial, Helvetica">subtype_mark</FONT> that denotes an unconstrained
subtype, a check is made that each discriminant of the ancestor has the
value specified for a corresponding discriminant, either in the <FONT FACE="Arial, Helvetica">record_component_association_list</FONT>,
or in the <FONT FACE="Arial, Helvetica">derived_type_definition</FONT>
for some ancestor of the type of the <FONT FACE="Arial, Helvetica">extension_aggregate</FONT>.
<A NAME="I2295"></A>Constraint_Error is raised if this check fails. </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>8&nbsp;&nbsp;If all components of the
value of the <FONT FACE="Arial, Helvetica">extension_aggregate</FONT>
are determined by the <FONT FACE="Arial, Helvetica">ancestor_part</FONT>,
then the <FONT FACE="Arial, Helvetica">record_component_association_list</FONT>
is required to be simply <B>null record</B>.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>10</FONT></DIV>
<DIV Class="Notes"><FONT SIZE=-1>9&nbsp;&nbsp;If the <FONT FACE="Arial, Helvetica">ancestor_part</FONT>
is a <FONT FACE="Arial, Helvetica">subtype_mark</FONT>, then its type
can be abstract. If its type is controlled, then as the last step of
evaluating the aggregate, the Initialize procedure of the ancestor type
is called, unless the Initialize procedure is abstract (see <A HREF="RM-7-6.html">7.6</A>).
</FONT></DIV>

<H4 ALIGN=CENTER>Examples</H4>
<DIV Class="Paranum"><FONT SIZE=-2>11</FONT></DIV>
<DIV Class="Normal" Style="margin-bottom: 0.4em">&nbsp;&nbsp;&nbsp;&nbsp;<I>Examples of
extension aggregates (for types defined in <A HREF="RM-3-9-1.html">3.9.1</A>):</I>
</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>12</FONT></DIV>
<DIV Class="Examples"><TT>Painted_Point'(Point&nbsp;<B>with</B>&nbsp;Red)<BR>
(Point'(P)&nbsp;<B>with</B>&nbsp;Paint&nbsp;=&gt;&nbsp;Black)</TT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>13</FONT></DIV>
<DIV Class="Examples"><TT>(Expression&nbsp;<B>with</B>&nbsp;Left&nbsp;=&gt;&nbsp;1.2,&nbsp;Right&nbsp;=&gt;&nbsp;3.4)<BR>
Addition'(Binop&nbsp;<B>with&nbsp;null&nbsp;record</B>)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>--&nbsp;presuming&nbsp;Binop&nbsp;is&nbsp;of&nbsp;type&nbsp;Binary_Operation</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-3-1.html">Previous</A>&nbsp;&nbsp;&nbsp;<A HREF="RM-4-3-3.html">Next</A>&nbsp;&nbsp;&nbsp;<A HREF="RM-TTL.html">Legal</A></P>
</BODY>
</HTML>