Dynamic Semantics (GNAT Reference Manual) (original) (raw)
17.2.2.3 Dynamic Semantics ¶
The evaluation of a delta_aggregate begins with the evaluation of thebase_expression of the delta_aggregate; then that value is used to create and initialize the anonymous object of the aggregate. The bounds of the anonymous object of an array_delta_aggregate and the discriminants (if any) of the anonymous object of a record_delta_aggregate are those of thebase_expression.
If a record_delta_aggregate is of a specific tagged type, its tag is that of the specific type; if it is of a class-wide type, its tag is that of the base_expression.
For a delta_aggregate, for each discrete_choice or each subcomponent associated with a record_subcomponent_associated,array_component_association or array_subcomponent_association (in the order given in the enclosing discrete_choice_list orsubcomponent_association_list, respectively):
- if the associated subcomponent belongs to a variant, a check is made that the values of the governing discriminants are such that the anonymous object has this component. The exception
Constraint_Erroris raised if this check fails. - if the associated subcomponent is a subcomponent of an array, then for each represented index value (in ascending order, if the
discrete_choicerepresents a range):- the index value is converted to the index type of the array type.
- a check is made that the index value belongs to the index range of the corresponding array part of the anonymous object;
Constraint_Erroris raised if this check fails. - the expression of the
record_subcomponent_association,array_component_associationorarray_subcomponent_associationis evaluated, converted to the nominal subtype of the associated subcomponent, and assigned to the corresponding subcomponent of the anonymous object.