Contents Index Search Previous Next
13.4 Enumeration Representation Clauses
1
An enumeration_representation_clause
specifies the internal codes for enumeration literals.
Syntax
2
enumeration_representation_clause
::=
for first_subtype_local_name use enumeration_aggregate;
3
enumeration_aggregate
::= array_aggregate
Name Resolution Rules
4
The
enumeration_aggregate
shall be written as a one-dimensional
array_aggregate,
for which the index subtype is the unconstrained subtype of the enumeration
type, and each component expression is expected to be of any integer
type.
Legality Rules
5
The first_subtype_local_name
of an enumeration_representation_clause
shall denote an enumeration subtype.
6
The expressions given in the array_aggregate
shall be static, and shall specify distinct integer codes for each value
of the enumeration type; the associated integer codes shall satisfy the
predefined ordering relation of the type.
Static Semantics
7
An
enumeration_representation_clause
specifies the
coding aspect of representation.
The
coding consists of the
internal code for each enumeration literal,
that is, the integral value used internally to represent each literal.
Implementation Requirements
8
For nonboolean enumeration types, if the coding
is not specified for the type, then for each value of the type, the internal
code shall be equal to its position number.
Implementation Advice
9
The
recommended level of support for
enumeration_representation_clauses
is:
10
- An implementation should support at
least the internal codes in the range System.Min_Int..System.Max_Int.
An implementation need not support enumeration_representation_clauses
for boolean types.
11/1
11 Unchecked_Conversion
may be used to query the internal codes used for an enumeration type.
The attributes of the type, such as Succ, Pred, and Pos, are unaffected
by the enumeration_representation_clause.
For example, Pos always returns the position number, not the internal
integer code that might have been specified in a enumeration_representation_clause.
Examples
12
Example of an
enumeration representation clause:
13
type Mix_Code is (ADD, SUB, MUL, LDA, STA, STZ);
14
for Mix_Code use
(ADD => 1, SUB => 2, MUL => 3, LDA => 8, STA => 24, STZ =>33);
Contents Index Search Previous Next Legal