DocAda(tm) is a productivity tool of KSCE

____ | Up | Next | Back | Forward
About DocAda Light: Preface / Preliminary / Help / TOC / Copyright
DocAda Online at the Ada Home: Complete RM95 / Updates / News

4.3.1 Record Aggregates

In a record_aggregate, a value is specified for each component of the record or record extension value, using either a named or a positional association.

Syntax

   
       record_aggregate ::= (record_component_association_list)

       record_component_association_list ::=
           record_component_association {, record_component_association}
         | null record

       record_component_association ::=
          [ component_choice_list => ] expression

       component_choice_list ::=
            component_selector_name {| component_selector_name}
          | others

Name Resolution Rules

The expected type for a record_aggregate shall be a single nonlimited record type or record extension.

For the record_component_association_list of a record_aggregate, all components of the composite value defined by the aggregate are needed; for the association list of an extension_aggregate, only those components not determined by the ancestor expression or subtype are needed (see 4.3.2). Each selector_name in a record_component_association shall denote a needed component (including possibly a discriminant).

The expected type for the expression of a record_component_association is the type of the associated component(s); the associated component(s) are as follows:

Legality Rules

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 3.8) 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.

Examples

Example of a record aggregate with positional associations:

    
       (4, July, 1776)                                       --  see 3.8

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 3.8.1
       (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 3.10.1

        --  The allocator is evaluated twice:  Succ and Pred designate different cells

Examples of record aggregates for tagged types (see 3.9 and 3.9.1):

    
       Expression'(null record)
       Literal'(Value => 0.0)
       Painted_Point'(0.0, Pi/2.0, Paint => Red)

About DocAda Light: Preface / Preliminary / Help / TOC / Copyright
DocAda Online at the Ada Home: Complete RM95 / Updates / News
____ | Up | Next | Back | Forward


Copyright © 1994-1997 by Kempe Software Capital Enterprises. All Rights Reserved. For comments on this DocAda(tm) hypertext document, please write to KSCE, at docada@ksce.com