File: AA-12-1.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 (234 lines) | stat: -rw-r--r-- 19,177 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
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
    <TITLE>AARM95 - Generic Declarations</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-12.html">Previous</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-12-2.html">Next</A></P>
<HR>
<H1> 12.1 Generic Declarations</H1>
<DIV Class="Paranum"><FONT SIZE=-2>1</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;[A <FONT FACE="Arial, Helvetica">generic_declaration</FONT>
declares a generic unit, which is either a generic subprogram or a generic
package. A <FONT FACE="Arial, Helvetica">generic_declaration</FONT> includes
a <FONT FACE="Arial, Helvetica">generic_formal_part</FONT> declaring
any generic formal parameters. A generic formal parameter can be an object;
alternatively (unlike a parameter of a subprogram), it can be a type,
a subprogram, or a package.] </DIV>

<H4 ALIGN=CENTER>Syntax</H4>
<DIV Class="Paranum"><FONT SIZE=-2>2</FONT></DIV>
<DIV Class="SyntaxIndented"><FONT FACE="Arial, Helvetica">generic_declaration<A NAME="I4160"></A>
::= </FONT><A NAME="I4161"></A><FONT FACE="Arial, Helvetica">generic_subprogram_declaration</FONT>&nbsp;|&nbsp;<A NAME="I4162"></A><FONT FACE="Arial, Helvetica">generic_package_declaration</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>3</FONT></DIV>
<DIV Class="SyntaxIndented"><FONT FACE="Arial, Helvetica">generic_subprogram_declaration<A NAME="I4163"></A>
::= </FONT><BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<A NAME="I4164"></A><FONT FACE="Arial, Helvetica">generic_formal_part</FONT>&nbsp;&nbsp;<A NAME="I4165"></A><FONT FACE="Arial, Helvetica">subprogram_specification</FONT>;</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>4</FONT></DIV>
<DIV Class="SyntaxIndented"><FONT FACE="Arial, Helvetica">generic_package_declaration<A NAME="I4166"></A>
::= </FONT><BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<A NAME="I4167"></A><FONT FACE="Arial, Helvetica">generic_formal_part</FONT>&nbsp;&nbsp;<A NAME="I4168"></A><FONT FACE="Arial, Helvetica">package_specification</FONT>;</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>5</FONT></DIV>
<DIV Class="SyntaxIndented"><FONT FACE="Arial, Helvetica">generic_formal_part<A NAME="I4169"></A>
::= </FONT><B>generic</B>&nbsp;{<A NAME="I4170"></A><FONT FACE="Arial, Helvetica">generic_formal_parameter_declaration</FONT>&nbsp;|&nbsp;<A NAME="I4171"></A><FONT FACE="Arial, Helvetica">use_clause</FONT>}</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>6</FONT></DIV>
<DIV Class="SyntaxIndented"><FONT FACE="Arial, Helvetica">generic_formal_parameter_declaration<A NAME="I4172"></A>
::= </FONT><BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<A NAME="I4173"></A><FONT FACE="Arial, Helvetica">formal_object_declaration</FONT><BR>
&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;<A NAME="I4174"></A><FONT FACE="Arial, Helvetica">formal_type_declaration</FONT><BR>
&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;<A NAME="I4175"></A><FONT FACE="Arial, Helvetica">formal_subprogram_declaration</FONT><BR>
&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;<A NAME="I4176"></A><FONT FACE="Arial, Helvetica">formal_package_declaration</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>7</FONT></DIV>
<DIV Class="SyntaxIndented">The only form of <FONT FACE="Arial, Helvetica">subtype_indication</FONT>
allowed within a <FONT FACE="Arial, Helvetica">generic_formal_part</FONT>
is a <FONT FACE="Arial, Helvetica">subtype_mark</FONT> [(that is, the
<FONT FACE="Arial, Helvetica">subtype_indication</FONT> shall not include
an explicit <FONT FACE="Arial, Helvetica">constraint</FONT>)]. The defining
name of a generic subprogram shall be an <FONT FACE="Arial, Helvetica">identifier</FONT>
[(not an <FONT FACE="Arial, Helvetica">operator_symbol</FONT>)]. </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>7.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Reason: </B>The reason for
forbidding <FONT FACE="Arial, Helvetica">constraint</FONT>s in <FONT FACE="Arial, Helvetica">subtype_indication</FONT>s
is that it simplifies the elaboration of <FONT FACE="Arial, Helvetica">generic_declaration</FONT>s
(since there is nothing to evaluate), and that it simplifies the matching
rules, and makes them more checkable at compile time. </FONT></DIV>

<H4 ALIGN=CENTER>Static Semantics</H4>
<DIV Class="Paranum"><FONT SIZE=-2>8</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;<A NAME="I4177"></A><A NAME="I4178"></A><A NAME="I4179"></A><A NAME="I4180"></A>A
<FONT FACE="Arial, Helvetica">generic_declaration</FONT> declares a generic
unit -- a generic package, generic procedure or generic function, as
appropriate.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>9</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;<A NAME="I4181"></A>An entity is a <I>generic
formal</I> entity if it is declared by a <FONT FACE="Arial, Helvetica">generic_formal_parameter_declaration</FONT>.
``Generic formal,'' or simply ``formal,'' is used as a prefix in referring
to objects, subtypes (and types), functions, procedures and packages,
that are generic formal entities, as well as to their respective declarations.
[Examples: ``generic formal procedure'' or a ``formal integer type declaration.'']
</DIV>

<H4 ALIGN=CENTER>Dynamic Semantics</H4>
<DIV Class="Paranum"><FONT SIZE=-2>10</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;<A NAME="I4182"></A>The elaboration of a <FONT FACE="Arial, Helvetica">generic_declaration</FONT>
has no effect. </DIV>
<DIV Class="NotesHeader"><FONT SIZE=-1>NOTES</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>11</FONT></DIV>
<DIV Class="Notes"><FONT SIZE=-1>1&nbsp;&nbsp;Outside a generic unit
a <FONT FACE="Arial, Helvetica">name</FONT> that denotes the <FONT FACE="Arial, Helvetica">generic_declaration</FONT>
denotes the generic unit. In contrast, within the declarative region
of the generic unit, a <FONT FACE="Arial, Helvetica">name</FONT> that
denotes the <FONT FACE="Arial, Helvetica">generic_declaration</FONT>
denotes the current instance. </FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>11.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Proof: </B>This is stated officially
as part of the ``current instance'' rule in <A HREF="AA-8-6.html">8.6</A>,
``<A HREF="AA-8-6.html">The Context of Overload Resolution</A>''. See
also <A HREF="AA-12-3.html">12.3</A>, ``<A HREF="AA-12-3.html">Generic
Instantiation</A>''. </FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>12</FONT></DIV>
<DIV Class="Notes"><FONT SIZE=-1>2&nbsp;&nbsp;Within a generic <FONT FACE="Arial, Helvetica">subprogram_body</FONT>,
the name of this program unit acts as the name of a subprogram. Hence
this name can be overloaded, and it can appear in a recursive call of
the current instance. For the same reason, this name cannot appear after
the reserved word <B>new</B> in a (recursive) <FONT FACE="Arial, Helvetica">generic_instantiation</FONT>.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>13</FONT></DIV>
<DIV Class="Notes"><FONT SIZE=-1>3&nbsp;&nbsp;A <FONT FACE="Arial, Helvetica">default_expression</FONT>
or <FONT FACE="Arial, Helvetica">default_name</FONT> appearing in a <FONT FACE="Arial, Helvetica">generic_formal_part</FONT>
is not evaluated during elaboration of the <FONT FACE="Arial, Helvetica">generic_formal_part</FONT>;
instead, it is evaluated when used. (The usual visibility rules apply
to any <FONT FACE="Arial, Helvetica">name</FONT> used in a default: the
denoted declaration therefore has to be visible at the place of the expression.)
</FONT></DIV>

<H4 ALIGN=CENTER>Examples</H4>
<DIV Class="Paranum"><FONT SIZE=-2>14</FONT></DIV>
<DIV Class="Normal" Style="margin-bottom: 0.4em">&nbsp;&nbsp;&nbsp;&nbsp;<I>Examples of
generic formal parts:</I> </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>15</FONT></DIV>
<DIV Class="Examples"><TT><B>generic</B>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--<I>&nbsp;&nbsp;parameterless&nbsp;</I></TT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>16</FONT></DIV>
<DIV Class="Examples"><TT><B>generic</B><BR>
&nbsp;&nbsp;&nbsp;Size&nbsp;:&nbsp;Natural;&nbsp;&nbsp;--<I>&nbsp;&nbsp;formal&nbsp;object&nbsp;</I></TT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>17</FONT></DIV>
<DIV Class="Examples"><TT><B>generic</B><BR>
&nbsp;&nbsp;&nbsp;Length&nbsp;:&nbsp;Integer&nbsp;:=&nbsp;200;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--<I>&nbsp;formal&nbsp;object&nbsp;with&nbsp;a&nbsp;default&nbsp;expression</I></TT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>18</FONT></DIV>
<DIV Class="Examples"><TT>&nbsp;&nbsp;&nbsp;Area&nbsp;&nbsp;&nbsp;:&nbsp;Integer&nbsp;:=&nbsp;Length*Length;&nbsp;--<I>&nbsp;formal&nbsp;object&nbsp;with&nbsp;a&nbsp;default&nbsp;expression</I></TT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>19</FONT></DIV>
<DIV Class="Examples"><TT><B>generic</B><BR>
&nbsp;&nbsp;&nbsp;<B>type</B>&nbsp;Item&nbsp;&nbsp;<B>is</B>&nbsp;<B>private</B>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--<I>&nbsp;formal&nbsp;type</I><BR>
&nbsp;&nbsp;&nbsp;<B>type</B>&nbsp;Index&nbsp;<B>is</B>&nbsp;(&lt;&gt;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--<I>&nbsp;formal&nbsp;type</I><BR>
&nbsp;&nbsp;&nbsp;<B>type</B>&nbsp;Row&nbsp;&nbsp;&nbsp;<B>is</B>&nbsp;<B>array</B>(Index&nbsp;<B>range</B>&nbsp;&lt;&gt;)&nbsp;<B>of</B>&nbsp;Item;&nbsp;--<I>&nbsp;formal&nbsp;type</I><BR>
&nbsp;&nbsp;&nbsp;<B>with</B>&nbsp;<B>function</B>&nbsp;&quot;&lt;&quot;(X,&nbsp;Y&nbsp;:&nbsp;Item)&nbsp;<B>return</B>&nbsp;Boolean;&nbsp;&nbsp;&nbsp;&nbsp;--<I>&nbsp;formal&nbsp;subprogram&nbsp;</I></TT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>20</FONT></DIV>
<DIV Class="Wide" Style="margin-bottom: 0.4em">&nbsp;&nbsp;&nbsp;&nbsp;<I>Examples of generic
declarations declaring generic subprograms Exchange and Squaring:</I>
</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>21</FONT></DIV>
<DIV Class="Examples"><TT><B>generic</B><BR>
&nbsp;&nbsp;&nbsp;<B>type</B>&nbsp;Elem&nbsp;<B>is</B>&nbsp;<B>private</B>;<BR>
<B>procedure</B>&nbsp;Exchange(U,&nbsp;V&nbsp;:&nbsp;<B>in</B>&nbsp;<B>out</B>&nbsp;Elem);</TT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>22</FONT></DIV>
<DIV Class="Examples"><TT><B>generic</B><BR>
&nbsp;&nbsp;&nbsp;<B>type</B>&nbsp;Item&nbsp;<B>is</B>&nbsp;<B>private</B>;<BR>
&nbsp;&nbsp;&nbsp;<B>with</B>&nbsp;<B>function</B>&nbsp;&quot;*&quot;(U,&nbsp;V&nbsp;:&nbsp;Item)&nbsp;<B>return</B>&nbsp;Item&nbsp;<B>is</B>&nbsp;&lt;&gt;;<BR>
<B>function</B>&nbsp;Squaring(X&nbsp;:&nbsp;Item)&nbsp;<B>return</B>&nbsp;Item;</TT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>23</FONT></DIV>
<DIV Class="Wide" Style="margin-bottom: 0.4em">&nbsp;&nbsp;&nbsp;&nbsp;<I>Example of a generic
declaration declaring a generic package:</I> </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>24</FONT></DIV>
<DIV Class="Examples"><TT><B>generic</B><BR>
&nbsp;&nbsp;&nbsp;<B>type</B>&nbsp;Item&nbsp;&nbsp;&nbsp;<B>is</B>&nbsp;<B>private</B>;<BR>
&nbsp;&nbsp;&nbsp;<B>type</B>&nbsp;Vector&nbsp;<B>is</B>&nbsp;<B>array</B>&nbsp;(Positive&nbsp;<B>range</B>&nbsp;&lt;&gt;)&nbsp;<B>of</B>&nbsp;Item;<BR>
&nbsp;&nbsp;&nbsp;<B>with</B>&nbsp;<B>function</B>&nbsp;Sum(X,&nbsp;Y&nbsp;:&nbsp;Item)&nbsp;<B>return</B>&nbsp;Item;<BR>
<B>package</B>&nbsp;On_Vectors&nbsp;<B>is</B><BR>
&nbsp;&nbsp;&nbsp;<B>function</B>&nbsp;Sum&nbsp;&nbsp;(A,&nbsp;B&nbsp;:&nbsp;Vector)&nbsp;<B>return</B>&nbsp;Vector;<BR>
&nbsp;&nbsp;&nbsp;<B>function</B>&nbsp;Sigma(A&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;Vector)&nbsp;<B>return</B>&nbsp;Item;<BR>
&nbsp;&nbsp;&nbsp;Length_Error&nbsp;:&nbsp;<B>exception</B>;<BR>
<B>end</B>&nbsp;On_Vectors;</TT></DIV>

<H4 ALIGN=CENTER>Extensions to Ada 83</H4>
<DIV Class="Paranum"><FONT SIZE=-2>24.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><A NAME="I4183"></A>The syntax
rule for <FONT FACE="Arial, Helvetica">generic_formal_parameter_declaration</FONT>
is modified to allow the reserved words <B>tagged</B> and <B>abstract</B>,
to allow formal derived types, and to allow formal packages.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>24.b</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><FONT FACE="Arial, Helvetica">Use_clause</FONT>s
are allowed in <FONT FACE="Arial, Helvetica">generic_formal_part</FONT>s.
This is necessary in order to allow a <FONT FACE="Arial, Helvetica">use_clause</FONT>
within a formal part to provide direct visibility of declarations within
a generic formal package. </FONT></DIV>

<H4 ALIGN=CENTER>Wording Changes from Ada 83</H4>
<DIV Class="Paranum"><FONT SIZE=-2>24.c</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>The syntax for <FONT FACE="Arial, Helvetica">generic_formal_parameter_declaration</FONT>
and <FONT FACE="Arial, Helvetica">formal_type_definition</FONT> is split
up into more named categories. The rules for these categories are moved
to the appropriate clauses and subclauses. The names of the categories
are changed to be more intuitive and uniform. For example, we changed
<FONT FACE="Arial, Helvetica">generic_parameter_declaration</FONT> to
<FONT FACE="Arial, Helvetica">generic_formal_parameter_declaration</FONT>,
because the thing it declares is a generic formal, not a generic. In
the others, we abbreviate ``generic_formal'' to just ``formal''. We can't
do that for <FONT FACE="Arial, Helvetica">generic_formal_parameter_declaration</FONT>,
because of confusion with normal formal parameters of subprograms. </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-12.html">Previous</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-12-2.html">Next</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-TTL.html">Legal</A></P>
</BODY>
</HTML>