File: AA-5-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 (307 lines) | stat: -rw-r--r-- 22,837 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
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
    <TITLE>AARM95 - Assignment Statements</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-5-1.html">Previous</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-5-3.html">Next</A></P>
<HR>
<H1> 5.2 Assignment Statements</H1>
<DIV Class="Paranum"><FONT SIZE=-2>1</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;[An <FONT FACE="Arial, Helvetica">assignment_statement</FONT>
replaces the current value of a variable with the result of evaluating
an <FONT FACE="Arial, Helvetica">expression</FONT>.] </DIV>

<H4 ALIGN=CENTER>Syntax</H4>
<DIV Class="Paranum"><FONT SIZE=-2>2</FONT></DIV>
<DIV Class="SyntaxIndented"><FONT FACE="Arial, Helvetica">assignment_statement<A NAME="I2921"></A>
::= </FONT><BR>
&nbsp;&nbsp;&nbsp;<I>variable_</I><A NAME="I2922"></A><FONT FACE="Arial, Helvetica">name</FONT>&nbsp;:=&nbsp;<A NAME="I2923"></A><FONT FACE="Arial, Helvetica">expression</FONT>;</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>3</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;The execution of an <FONT FACE="Arial, Helvetica">assignment_statement</FONT>
includes the evaluation of the <FONT FACE="Arial, Helvetica">expression</FONT>
and the <I>assignment</I> of the value of the <FONT FACE="Arial, Helvetica">expression</FONT>
into the <I>target</I>. <A NAME="I2924"></A><A NAME="I2925"></A>[An assignment
operation (as opposed to an <FONT FACE="Arial, Helvetica">assignment_statement</FONT>)
is performed in other contexts as well, including object initialization
and by-copy parameter passing.] <A NAME="I2926"></A><A NAME="I2927"></A>The
<I>target</I> of an assignment operation is the view of the object to
which a value is being assigned; the target of an <FONT FACE="Arial, Helvetica">assignment_statement</FONT>
is the variable denoted by the <I>variable_</I><FONT FACE="Arial, Helvetica">name</FONT>.
</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>3.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Discussion: </B>Don't confuse
this notion of the ``target'' of an assignment with the notion of the
``target object'' of an entry call or requeue.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>3.b</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>Don't confuse the term ``assignment
operation'' with the <FONT FACE="Arial, Helvetica">assignment_statement</FONT>.
The assignment operation is just one part of the execution of an <FONT FACE="Arial, Helvetica">assignment_statement</FONT>.
The assignment operation is also a part of the execution of various other
constructs; see <A HREF="AA-7-6-1.html">7.6.1</A>, ``<A HREF="AA-7-6-1.html">Completion
and Finalization</A>'' for a complete list. Note that when we say, ``such-and-such
is assigned to so-and-so'', we mean that the assignment operation is
being applied, and that so-and-so is the target of the assignment operation.
</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="I2928"></A>The <I>variable_</I><FONT FACE="Arial, Helvetica">name</FONT>
of an <FONT FACE="Arial, Helvetica">assignment_statement</FONT> is expected
to be of any nonlimited type. <A NAME="I2929"></A>The expected type for
the <FONT FACE="Arial, Helvetica">expression</FONT> is the type of the
target. </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>4.a</FONT></DIV>
<DIV Class="Annotations" Style="margin-bottom: 0.4em"><FONT SIZE=-1><B>Implementation
Note: </B>An <FONT FACE="Arial, Helvetica">assignment_statement</FONT>
as a whole is a &quot;complete context,&quot; so if the <I>variable_</I><FONT FACE="Arial, Helvetica">name</FONT>
of an <FONT FACE="Arial, Helvetica">assignment_statement</FONT> is overloaded,
the <FONT FACE="Arial, Helvetica">expression</FONT> can be used to help
disambiguate it. For example: </FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>4.b</FONT></DIV>
<DIV Class="SmallExamples"><TT>&nbsp;&nbsp;<B>type</B>&nbsp;P1&nbsp;<B>is&nbsp;access</B>&nbsp;R1;<BR>
&nbsp;&nbsp;<B>type</B>&nbsp;P2&nbsp;<B>is&nbsp;access</B>&nbsp;R2;</TT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>4.c</FONT></DIV>
<DIV Class="SmallExamples"><TT>&nbsp;&nbsp;<B>function</B>&nbsp;F&nbsp;return&nbsp;P1;<BR>
&nbsp;&nbsp;<B>function</B>&nbsp;F&nbsp;return&nbsp;P2;</TT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>4.d</FONT></DIV>
<DIV Class="SmallExamples"><TT>&nbsp;&nbsp;X&nbsp;:&nbsp;R1;<BR>
<B>begin</B><BR>
&nbsp;&nbsp;F.all&nbsp;:=&nbsp;X;&nbsp;&nbsp;<I>--&nbsp;Right&nbsp;hand&nbsp;side&nbsp;helps&nbsp;resolve&nbsp;left&nbsp;hand&nbsp;side</I></TT></DIV>

<H4 ALIGN=CENTER>Legality Rules</H4>
<DIV Class="Paranum"><FONT SIZE=-2>5</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;The target [denoted by the <I>variable_</I><FONT FACE="Arial, Helvetica">name</FONT>]
shall be a variable.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>6</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;If the target is of a tagged class-wide type <I>T</I>'Class,
then the <FONT FACE="Arial, Helvetica">expression</FONT> shall either
be dynamically tagged, or of type <I>T</I> and tag-indeterminate (see
<A HREF="AA-3-9-2.html">3.9.2</A>). </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>6.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Reason: </B>This is consistent
with the general rule that a single dispatching operation shall not have
both dynamically tagged and statically tagged operands. Note that for
an object initialization (as opposed to the <FONT FACE="Arial, Helvetica">assignment_statement</FONT>),
a statically tagged initialization expression is permitted, since there
is no chance for confusion (or Tag_Check failure). Also, in an object
initialization, tag-indeterminate expressions of any type covered by
<I>T</I>'Class would be allowed, but with an <FONT FACE="Arial, Helvetica">assignment_statement</FONT>,
that might not work if the tag of the target was for a type that didn't
have one of the dispatching operations in the tag-indeterminate expression.
</FONT></DIV>

<H4 ALIGN=CENTER>Dynamic Semantics</H4>
<DIV Class="Paranum"><FONT SIZE=-2>7</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;<A NAME="I2930"></A>For the execution of an <FONT FACE="Arial, Helvetica">assignment_statement</FONT>,
the <I>variable_</I><FONT FACE="Arial, Helvetica">name</FONT> and the
<FONT FACE="Arial, Helvetica">expression</FONT> are first evaluated in
an arbitrary order. </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>7.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Ramification: </B>Other rules
of the language may require that the bounds of the variable be determined
prior to evaluating the <FONT FACE="Arial, Helvetica">expression</FONT>,
but that does not necessarily require evaluation of the <I>variable_</I><FONT FACE="Arial, Helvetica">name</FONT>,
as pointed out by the ACID. </FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>8</FONT></DIV>
<DIV Class="Normal" Style="margin-bottom: 0.4em">&nbsp;&nbsp;&nbsp;When the type of
the target is class-wide: </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>9</FONT></DIV>
<UL Class="Bulleted"><LI TYPE=DISC><A NAME="I2931"></A>If the <FONT FACE="Arial, Helvetica">expression</FONT>
is tag-indeterminate (see <A HREF="AA-3-9-2.html">3.9.2</A>), then the
controlling tag value for the <FONT FACE="Arial, Helvetica">expression</FONT>
is the tag of the target; </LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>9.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Ramification: </B>See <A HREF="AA-3-9-2.html">3.9.2</A>,
``<A HREF="AA-3-9-2.html">Dispatching Operations of Tagged Types</A>''.
</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>10</FONT></DIV>
<UL Class="Bulleted"><LI TYPE=DISC><A NAME="I2932"></A><A NAME="I2933"></A><A NAME="I2934"></A>Otherwise
[(the <FONT FACE="Arial, Helvetica">expression</FONT> is dynamically
tagged)], a check is made that the tag of the value of the <FONT FACE="Arial, Helvetica">expression</FONT>
is the same as that of the target; if this check fails, Constraint_Error
is raised. </LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>11</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;The value of the <FONT FACE="Arial, Helvetica">expression</FONT>
is converted to the subtype of the target. [The conversion might raise
an exception (see <A HREF="AA-4-6.html">4.6</A>).] <A NAME="I2935"></A></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>11.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Ramification: </B><A HREF="AA-4-6.html">4.6</A>,
``<A HREF="AA-4-6.html">Type Conversions</A>'' defines what actions and
checks are associated with subtype conversion. For non-array subtypes,
it is just a constraint check presuming the types match. For array subtypes,
it checks the lengths and slides if the target is constrained. ``Sliding''
means the array doesn't have to have the same bounds, so long as it is
the same length. </FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>12</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;In cases involving controlled types, the target
is finalized, and an anonymous object might be used as an intermediate
in the assignment, as described in <A HREF="AA-7-6-1.html">7.6.1</A>,
``<A HREF="AA-7-6-1.html">Completion and Finalization</A>''. <A NAME="I2936"></A><A NAME="I2937"></A>In
any case, the converted value of the <FONT FACE="Arial, Helvetica">expression</FONT>
is then <I>assigned</I> to the target, which consists of the following
two steps: </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>12.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>To be honest: </B><A HREF="AA-7-6-1.html">7.6.1</A>
actually says that finalization happens always, but unless controlled
types are involved, this finalization during an <FONT FACE="Arial, Helvetica">assignment_statement</FONT>
does nothing. </FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>13</FONT></DIV>
<UL Class="Bulleted"><LI TYPE=DISC>The value of the target becomes the converted value.</LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>14</FONT></DIV>
<UL Class="Bulleted"><LI TYPE=DISC>If any part of the target is controlled, its value is adjusted
as explained in clause <A HREF="AA-7-6.html">7.6</A>. <A NAME="I2938"></A></LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>14.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Ramification: </B>If any parts
of the object are controlled, abort is deferred during the assignment
operation itself, but not during the rest of the execution of an <FONT FACE="Arial, Helvetica">assignment_statement</FONT>.
</FONT></DIV>
<DIV Class="NotesHeader"><FONT SIZE=-1>NOTES</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>15</FONT></DIV>
<DIV Class="Notes"><FONT SIZE=-1>2&nbsp;&nbsp;The tag of an object never
changes; in particular, an <FONT FACE="Arial, Helvetica">assignment_statement</FONT>
does not change the tag of the target.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>16</FONT></DIV>
<DIV Class="Notes"><FONT SIZE=-1>3&nbsp;&nbsp;The values of the discriminants
of an object designated by an access value cannot be changed (not even
by assigning a complete value to the object itself) since such objects
are always constrained; however, subcomponents of such objects may be
unconstrained. </FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>16.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Ramification: </B>The implicit
subtype conversion described above for <FONT FACE="Arial, Helvetica">assignment_statement</FONT>s
is performed only for the value of the right-hand side expression as
a whole; it is not performed for subcomponents of the value.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>16.b</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>The determination of the type
of the variable of an <FONT FACE="Arial, Helvetica">assignment_statement</FONT>
may require consideration of the expression if the variable name can
be interpreted as the name of a variable designated by the access value
returned by a function call, and similarly, as a component or slice of
such a variable (see <A HREF="AA-8-6.html">8.6</A>, ``<A HREF="AA-8-6.html">The
Context of Overload Resolution</A>''). </FONT></DIV>

<H4 ALIGN=CENTER>Examples</H4>
<DIV Class="Paranum"><FONT SIZE=-2>17</FONT></DIV>
<DIV Class="Normal" Style="margin-bottom: 0.4em">&nbsp;&nbsp;&nbsp;&nbsp;<I>Examples of
assignment statements:</I> </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>18</FONT></DIV>
<DIV Class="Examples"><TT>Value&nbsp;:=&nbsp;Max_Value&nbsp;-&nbsp;1;<BR>
Shade&nbsp;:=&nbsp;Blue;</TT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>19</FONT></DIV>
<DIV Class="Examples"><TT>Next_Frame(F)(M,&nbsp;N)&nbsp;:=&nbsp;2.5;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--<I>&nbsp;&nbsp;see&nbsp;<A HREF="AA-4-1-1.html">4.1.1</A></I><BR>
U&nbsp;:=&nbsp;Dot_Product(V,&nbsp;W);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--<I>&nbsp;&nbsp;see&nbsp;<A HREF="AA-6-3.html">6.3</A></I></TT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>20</FONT></DIV>
<DIV Class="Examples"><TT>Writer&nbsp;:=&nbsp;(Status&nbsp;=&gt;&nbsp;Open,&nbsp;Unit&nbsp;=&gt;&nbsp;Printer,&nbsp;Line_Count&nbsp;=&gt;&nbsp;60);&nbsp;&nbsp;--<I>&nbsp;see&nbsp;<A HREF="AA-3-8-1.html">3.8.1</A></I><BR>
Next_Car.<B>all</B>&nbsp;:=&nbsp;(72074,&nbsp;<B>null</B>);&nbsp;&nbsp;&nbsp;&nbsp;--<I>&nbsp;&nbsp;see&nbsp;<A HREF="AA-3-10-1.html">3.10.1</A></I></TT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>21</FONT></DIV>
<DIV Class="Wide" Style="margin-bottom: 0.4em">&nbsp;&nbsp;&nbsp;&nbsp;<I>Examples involving
scalar subtype conversions:</I> </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>22</FONT></DIV>
<DIV Class="Examples"><TT>I,&nbsp;J&nbsp;:&nbsp;Integer&nbsp;<B>range</B>&nbsp;1&nbsp;..&nbsp;10&nbsp;:=&nbsp;5;<BR>
K&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;Integer&nbsp;<B>range</B>&nbsp;1&nbsp;..&nbsp;20&nbsp;:=&nbsp;15;<BR>
&nbsp;...</TT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>23</FONT></DIV>
<DIV Class="Examples"><TT>I&nbsp;:=&nbsp;J;&nbsp;&nbsp;--<I>&nbsp;&nbsp;identical&nbsp;ranges</I><BR>
K&nbsp;:=&nbsp;J;&nbsp;&nbsp;--<I>&nbsp;&nbsp;compatible&nbsp;ranges</I><BR>
J&nbsp;:=&nbsp;K;&nbsp;&nbsp;--<I>&nbsp;&nbsp;will&nbsp;raise&nbsp;Constraint_Error&nbsp;if&nbsp;K&nbsp;&gt;&nbsp;10</I></TT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>24</FONT></DIV>
<DIV Class="Wide" Style="margin-bottom: 0.4em">&nbsp;&nbsp;&nbsp;&nbsp;<I>Examples involving
array subtype conversions:</I> </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>25</FONT></DIV>
<DIV Class="Examples"><TT>A&nbsp;:&nbsp;String(1&nbsp;..&nbsp;31);<BR>
B&nbsp;:&nbsp;String(3&nbsp;..&nbsp;33);<BR>
&nbsp;...</TT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>26</FONT></DIV>
<DIV Class="Examples"><TT>A&nbsp;:=&nbsp;B;&nbsp;&nbsp;--<I>&nbsp;&nbsp;same&nbsp;number&nbsp;of&nbsp;components</I></TT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>27</FONT></DIV>
<DIV Class="Examples"><TT>A(1&nbsp;..&nbsp;9)&nbsp;&nbsp;:=&nbsp;&quot;tar&nbsp;sauce&quot;;<BR>
A(4&nbsp;..&nbsp;12)&nbsp;:=&nbsp;A(1&nbsp;..&nbsp;9);&nbsp;&nbsp;--<I>&nbsp;&nbsp;A(1&nbsp;..&nbsp;12)&nbsp;=&nbsp;&quot;tartar&nbsp;sauce&quot;</I></TT></DIV>
<DIV Class="NotesHeader"><FONT SIZE=-1>NOTES</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>28</FONT></DIV>
<DIV Class="Notes"><FONT SIZE=-1>4&nbsp;&nbsp;<I>Notes on the examples:</I>
<FONT FACE="Arial, Helvetica">Assignment_statement</FONT>s are allowed
even in the case of overlapping slices of the same array, because the
<I>variable_</I><FONT FACE="Arial, Helvetica">name</FONT> and <FONT FACE="Arial, Helvetica">expression</FONT>
are both evaluated before copying the value into the variable. In the
above example, an implementation yielding A(1 .. 12) = &quot;tartartartar&quot;
would be incorrect. </FONT></DIV>

<H4 ALIGN=CENTER>Extensions to Ada 83</H4>
<DIV Class="Paranum"><FONT SIZE=-2>28.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><A NAME="I2939"></A>We now allow
user-defined finalization and value adjustment actions as part of <FONT FACE="Arial, Helvetica">assignment_statement</FONT>s
(see <A HREF="AA-7-6.html">7.6</A>, ``<A HREF="AA-7-6.html">User-Defined
Assignment and Finalization</A>''). </FONT></DIV>

<H4 ALIGN=CENTER>Wording Changes from Ada 83</H4>
<DIV Class="Paranum"><FONT SIZE=-2>28.b</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>The special case of array assignment
is subsumed by the concept of a subtype conversion, which is applied
for all kinds of types, not just arrays. For arrays it provides ``sliding''.
For numeric types it provides conversion of a value of a universal type
to the specific type of the target. For other types, it generally has
no run-time effect, other than a constraint check.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>28.c</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>We now cover in a general way
in <A HREF="AA-3-7-2.html">3.7.2</A> the erroneous execution possible
due to changing the value of a discriminant when the variable in an <FONT FACE="Arial, Helvetica">assignment_statement</FONT>
is a subcomponent that depends on discriminants. </FONT></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-5-1.html">Previous</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-5-3.html">Next</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-TTL.html">Legal</A></P>
</BODY>
</HTML>