File: AA-3-5-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 (181 lines) | stat: -rw-r--r-- 14,352 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
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
    <TITLE>AARM95 - Enumeration Types</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-3-5.html">Previous</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-3-5-2.html">Next</A></P>
<HR>
<H1> 3.5.1 Enumeration Types</H1>
<DIV Class="Paranum"><FONT SIZE=-2>1</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;[<A NAME="I1628"></A> An <FONT FACE="Arial, Helvetica">enumeration_type_definition</FONT>
defines an enumeration type.] </DIV>

<H4 ALIGN=CENTER>Syntax</H4>
<DIV Class="Paranum"><FONT SIZE=-2>2</FONT></DIV>
<DIV Class="SyntaxIndented"><FONT FACE="Arial, Helvetica">enumeration_type_definition<A NAME="I1629"></A>
::= </FONT><BR>
&nbsp;&nbsp;&nbsp;(<A NAME="I1630"></A><FONT FACE="Arial, Helvetica">enumeration_literal_specification</FONT>&nbsp;{,&nbsp;<A NAME="I1631"></A><FONT FACE="Arial, Helvetica">enumeration_literal_specification</FONT>})</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>3</FONT></DIV>
<DIV Class="SyntaxIndented"><FONT FACE="Arial, Helvetica">enumeration_literal_specification<A NAME="I1632"></A>
::= </FONT>&nbsp;<A NAME="I1633"></A><FONT FACE="Arial, Helvetica">defining_identifier</FONT>&nbsp;|&nbsp;<A NAME="I1634"></A><FONT FACE="Arial, Helvetica">defining_character_literal</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>4</FONT></DIV>
<DIV Class="SyntaxIndented"><FONT FACE="Arial, Helvetica">defining_character_literal<A NAME="I1635"></A>
::= </FONT><A NAME="I1636"></A><FONT FACE="Arial, Helvetica">character_literal</FONT></DIV>

<H4 ALIGN=CENTER>Legality Rules</H4>
<DIV Class="Paranum"><FONT SIZE=-2>5</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;[The <FONT FACE="Arial, Helvetica">defining_identifier</FONT>s
and <FONT FACE="Arial, Helvetica">defining_character_literal</FONT>s
listed in an <FONT FACE="Arial, Helvetica">enumeration_type_definition</FONT>
shall be distinct.] </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>5.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Proof: </B>This is a ramification
of the normal disallowance of homographs explicitly declared immediately
in the same declarative region.</FONT></DIV>

<H4 ALIGN=CENTER>Static Semantics</H4>
<DIV Class="Paranum"><FONT SIZE=-2>6</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;<A NAME="I1637"></A>Each <FONT FACE="Arial, Helvetica">enumeration_literal_specification</FONT>
is the explicit declaration of the corresponding <I>enumeration literal</I>:
it declares a parameterless function, whose defining name is the <FONT FACE="Arial, Helvetica">defining_identifier</FONT>
or <FONT FACE="Arial, Helvetica">defining_character_literal</FONT>, and
whose result type is the enumeration type. </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>6.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Reason: </B>This rule defines
the profile of the enumeration literal, which is used in the various
types of conformance. </FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>6.b</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Ramification: </B>The parameterless
function associated with an enumeration literal is fully defined by the
<FONT FACE="Arial, Helvetica">enumeration_type_definition</FONT>; a body
is not permitted for it, and it never fails the Elaboration_Check when
called. </FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>7</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;Each enumeration literal corresponds to a distinct
value of the enumeration type, and to a distinct position number. <A NAME="I1638"></A>The
position number of the value of the first listed enumeration literal
is zero; the position number of the value of each subsequent enumeration
literal is one more than that of its predecessor in the list.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>8</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;[The predefined order relations between values
of the enumeration type follow the order of corresponding position numbers.]</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>9</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;[<A NAME="I1639"></A> If the same <FONT FACE="Arial, Helvetica">defining_identifier</FONT>
or <FONT FACE="Arial, Helvetica">defining_character_literal</FONT> is
specified in more than one <FONT FACE="Arial, Helvetica">enumeration_type_definition</FONT>,
the corresponding enumeration literals are said to be <I>overloaded</I>.
At any place where an overloaded enumeration literal occurs in the text
of a program, the type of the enumeration literal has to be determinable
from the context (see <A HREF="AA-8-6.html">8.6</A>).] </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="I1640"></A><A NAME="I1641"></A><A NAME="I1642"></A>The
elaboration of an <FONT FACE="Arial, Helvetica">enumeration_type_definition</FONT>
creates the enumeration type and its first subtype, which is constrained
to the base range of the type. </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>10.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Ramification: </B>The first
subtype of a discrete type is always constrained, except in the case
of a derived type whose parent subtype is Whatever'Base. </FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>11</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;When called, the parameterless function associated
with an enumeration literal returns the corresponding value of the enumeration
type. </DIV>
<DIV Class="NotesHeader"><FONT SIZE=-1>NOTES</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>12</FONT></DIV>
<DIV Class="Notes"><FONT SIZE=-1>22&nbsp;&nbsp;If an enumeration literal
occurs in a context that does not otherwise suffice to determine the
type of the literal, then qualification by the name of the enumeration
type is one way to resolve the ambiguity (see <A HREF="AA-4-7.html">4.7</A>).
</FONT></DIV>

<H4 ALIGN=CENTER>Examples</H4>
<DIV Class="Paranum"><FONT SIZE=-2>13</FONT></DIV>
<DIV Class="Normal" Style="margin-bottom: 0.4em">&nbsp;&nbsp;&nbsp;&nbsp;<I>Examples of
enumeration types and subtypes: </I></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>14</FONT></DIV>
<DIV Class="Examples"><TT><B>type</B>&nbsp;Day&nbsp;&nbsp;&nbsp;&nbsp;<B>is</B>&nbsp;(Mon,&nbsp;Tue,&nbsp;Wed,&nbsp;Thu,&nbsp;Fri,&nbsp;Sat,&nbsp;Sun);<BR>
<B>type</B>&nbsp;Suit&nbsp;&nbsp;&nbsp;<B>is</B>&nbsp;(Clubs,&nbsp;Diamonds,&nbsp;Hearts,&nbsp;Spades);<BR>
<B>type</B>&nbsp;Gender&nbsp;<B>is</B>&nbsp;(M,&nbsp;F);<BR>
<B>type</B>&nbsp;Level&nbsp;&nbsp;<B>is</B>&nbsp;(Low,&nbsp;Medium,&nbsp;Urgent);<BR>
<B>type</B>&nbsp;Color&nbsp;&nbsp;<B>is</B>&nbsp;(White,&nbsp;Red,&nbsp;Yellow,&nbsp;Green,&nbsp;Blue,&nbsp;Brown,&nbsp;Black);<BR>
<B>type</B>&nbsp;Light&nbsp;&nbsp;<B>is</B>&nbsp;(Red,&nbsp;Amber,&nbsp;Green);&nbsp;<I>--&nbsp;Red&nbsp;and&nbsp;Green&nbsp;are&nbsp;overloaded</I></TT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>15</FONT></DIV>
<DIV Class="Examples"><TT><B>type</B>&nbsp;Hexa&nbsp;&nbsp;&nbsp;<B>is</B>&nbsp;('A',&nbsp;'B',&nbsp;'C',&nbsp;'D',&nbsp;'E',&nbsp;'F');<BR>
<B>type</B>&nbsp;Mixed&nbsp;&nbsp;<B>is</B>&nbsp;('A',&nbsp;'B',&nbsp;'*',&nbsp;B,&nbsp;None,&nbsp;'?',&nbsp;'%');</TT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>16</FONT></DIV>
<DIV Class="Examples"><TT><B>subtype</B>&nbsp;Weekday&nbsp;<B>is</B>&nbsp;Day&nbsp;&nbsp;&nbsp;<B>range</B>&nbsp;Mon&nbsp;..&nbsp;Fri;<BR>
<B>subtype</B>&nbsp;Major&nbsp;&nbsp;&nbsp;<B>is</B>&nbsp;Suit&nbsp;&nbsp;<B>range</B>&nbsp;Hearts&nbsp;..&nbsp;Spades;<BR>
<B>subtype</B>&nbsp;Rainbow&nbsp;<B>is</B>&nbsp;Color&nbsp;<B>range</B>&nbsp;Red&nbsp;..&nbsp;Blue;&nbsp;&nbsp;<I>--&nbsp;&nbsp;the&nbsp;Color&nbsp;Red,&nbsp;not&nbsp;the&nbsp;Light</I></TT></DIV>

<H4 ALIGN=CENTER>Wording Changes from Ada 83</H4>
<DIV Class="Paranum"><FONT SIZE=-2>16.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>The syntax rule for <FONT FACE="Arial, Helvetica">defining_character_literal</FONT>
is new. It is used for the defining occurrence of a <FONT FACE="Arial, Helvetica">character_literal</FONT>,
analogously to <FONT FACE="Arial, Helvetica">defining_identifier</FONT>.
Usage occurrences use the <FONT FACE="Arial, Helvetica">name</FONT> or
<FONT FACE="Arial, Helvetica">selector_name</FONT> syntactic categories.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>16.b</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>We emphasize the fact that an
enumeration literal denotes a function, which is called to produce a
value. </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-3-5.html">Previous</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-3-5-2.html">Next</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-TTL.html">Legal</A></P>
</BODY>
</HTML>