-
If the type of a record_aggregate is a record extension, then it shall
be a descendant of a record type, through one or more record extensions
(and no private extensions).
-
If there are no components needed in a given
record_component_association_list, then the reserved words null record
shall appear rather than a list of record_component_associations.
-
Each record_component_association shall have at least one associated
component, and each needed component shall be associated with exactly
one record_component_association. If a record_component_association has
two or more associated components, all of them shall be of the same
type.
-
If the components of a variant_part are needed, then the value of a
discriminant that governs the variant_part shall be given by a static
expression.
Dynamic Semantics
-
The evaluation of a record_aggregate consists of the evaluation of the
record_component_association_list.
-
For the evaluation of a record_component_association_list, any
per-object constraints, See section 3.8 Record Types, for components specified in the
association list are elaborated and any expressions are evaluated and
converted to the subtype of the associated component. Any constraint
elaborations and expression evaluations (and conversions) occur in an
arbitrary order, except that the expression for a discriminant is
evaluated (and converted) prior to the elaboration of any per-object
constraint that depends on it, which in turn occurs prior to the
evaluation and conversion of the expression for the component with the
per-object constraint.
-
The expression of a record_component_association is evaluated (and
converted) once for each associated component.
NOTES
-
(7) For a record_aggregate with positional associations, expressions
specifying discriminant values appear first since the
known_discriminant_part is given first in the declaration of the type;
they have to be in the same order as in the known_discriminant_part.
Examples
-
Example of a record aggregate with positional associations:
-
(4, July, 1776) -- See section 3.8 Record Types
-
Examples of record aggregates with named associations:
-
(Day => 4, Month => July, Year => 1776)
(Month => July, Day => 4, Year => 1776)
-
(Disk, Closed, Track => 5, Cylinder => 12) -- See section 3.8.1 Variant Parts and Discrete Choices
(Unit => Disk, Status => Closed, Cylinder => 9, Track => 1)
-
Example of component association with several choices:
-
(Value => 0, Succ|Pred => new Cell'(0, null, null))
-- See section 3.10.1 Incomplete Type Declarations
-
-- The allocator is evaluated twice:
-- Succ and Pred designate different cells
-
Examples of record aggregates for tagged types, See section 3.9 Tagged Types and Type Extensions, and See section 3.9.1 Type Extensions
-
Expression'(null record)
Literal'(Value => 0.0)
Painted_Point'(0.0, Pi/2.0, Paint => Red)