CVS difference for ai12s/ai12-0061-1.txt

Differences between 1.1 and version 1.2
Log of other versions for file ai12s/ai12-0061-1.txt

--- ai12s/ai12-0061-1.txt	2013/02/01 03:22:18	1.1
+++ ai12s/ai12-0061-1.txt	2013/11/13 01:47:00	1.2
@@ -1,4 +1,4 @@
-!standard 4.3.3(5/2)                                13-01-31    AI12-0061-1/01
+!standard 4.3.3(5/2)                                13-11-12    AI12-0061-1/02
 !standard 4.3.3(23)
 !standard 3.1(6/3)
 !standard 3.3.1(23/3)
@@ -38,62 +38,86 @@
-Change 4.3.3(5/2) to:
+Append to the end of the long semicolon-separated list of 3.1(6/3):
-array_component_association ::=
-   discrete_choice_list => expression
- | discrete_choice_list => <>
- | parameterized_array_component_association
+    ; a parameterized_array_component_association.
-Add after 4.3.3(5/2):
+Add after 3.3(6) (as a bulleted list item):
+    - The index parameter of a parameterized_array_component_association.
-parameterized_array_component_association ::=
-  for defining_identifier in discrete_choice_list => expression
+Add after 3.3(18.1/3) (as a bulleted list item):
+    - The index parameter of a parameterized_array_component_association.
-A parameterized_array_component_association declares an index
-parameter, which is an object whose type is the corresponding index
-type.  If the discrete_choice_list is a single nonstatic
-choice_expression or range, the constraint of the object's subtype is
-the single value given by the choice_expression, or it is defined by
-the range; otherwise, the bounds of the subtype's constraint are the
-smallest and largest values covered by the discrete_choice_list.
+Add ", parameterized_array_component_association"
+in the comment-separated list of 3.3.1(23/3), immediately after ",
-Change 4.3.3(23) to:
+  Change 4.3.3(5/2) to:
+     array_component_association ::=
+       discrete_choice_list => expression
+         | discrete_choice_list => <>
+         | parameterized_array_component_association
-2.  The array component expressions of the aggregate are evaluated in an
-arbitrary order and their values are converted to the component
-subtype of the array type; an array component expression is evaluated
-once for each associated component.  For a
-parameterized_array_component_association, before an array component
-expression is evaluated for an associated component, the index of that
-component is assigned to the index parameter.
+     parameterized_array_component_association ::=
+       for defining_identifier in discrete_choice_list => expression
-Add to the end of 3.1(6/3):
+Add after 4.3.3(6) (at the end of the syntax section):
-In addition, a parameterized_array_component_association is a
-declaration of its defining_identifier.
+   The defining_identifier of a parameterized_array_component_association
+   declares an index_parameter, an object of the corresponding index
+   type.
-Add after in 8.1(4.1/3):
+Append after 4.3.3(20) (at the end of the static semantics section)
-* a parameterized_array_component_association;
+   The subtype of an index_parameter is defined as follows:
+     - If every discrete_choice in the corresponding discrete_choice_list
+       either is a static expressions or is a subtype indication or range
+       that defines a static non-null range, then the lowest and
+       highest of the values covered by the discrete_choice_list
+       are the bounds of the subtype of the index parameter.
+       The subtype is constrained and static in this case.
-Change the last sentence of 3.3.1(23/3) to:
+     - Otherwise the subtype is the corresponding index subtype.
-An object declared by a loop_parameter_specification,
-iterator_specification, parameter_specification,
-entry_index_specification, choice_parameter_specification,
-extended_return_statement, or a formal_object_declaration of mode in
-out is not considered a stand-alone object.
+   The subtype of an index_parameter is also its nominal subtype.
-** We also need conformance wording similar to that for quantified
-expressions in AI12-0050-1. The editor did not add such wording because
-AI12-0050-1 does not yet have a wording proposal.
+TBD: define a static predicate for the subtype in the static case? This could
+be useful with case expressions.
-** The proposer suggests a note to point out this is not a for loop; the
-order of evaluation of the array component expressions is unspecified.
-The editor did not try to create such a note.
+Add after 4.3.3(31) (at the end of the dynamic semantics section)
+[Editor's note: I think this is the wrong place, as it is after checks and bounds text;
+I think it belongs near 4.3.3(23).]
+   During an evaluation of the expression a parameterized
+   array_component_association, the value of the corresponding
+   index parameter is that of the corresponding index of the
+   corresponding array component.
+AARM Note:
+   Taken together with the preceding rule that "The array component
+   expressions of the aggregate are evaluated in an arbitrary order",
+   this implies that an index parameter can take on its values in an
+   arbitrary order. This is different than, for example,
+   a loop_parameter.
+Add after 4.3.3(32/3): [Editor's note: I moved this, Steve had it in the wrong
+   Note:
+     An index_parameter is a constant object (see 3.3).
+[The note is intended to follow the example of 5.5(10).]
+In 5.5(6), replace "whose subtype" with "whose subtype (and nominal subtype)".
+[Because the nominal subtype for a loop_parameter was never defined.]
+Add after 8.1(4) (as a bulleted list item):
+    - A parameterized_array_component_association;
+Add to the list of 13.1.1(4.b/3): (after iterator specification)
+    parameterizied_array_comonent_association -- NO
 We don't need to change 4.3.3(17), since the wording for applies to
@@ -111,6 +135,17 @@
 either the syntax is a regular for loop, or it can be expanded at compile
 time (as in the above example). So the extra implementation burden of
 allowing a list should be minimal.
+Note that the wording for AI12-0050 handles conformance for this new construct
+with no need for any further wording changes in this area. For example, we
+get the conformance we want for
+    subtype S is Integer range 1 .. 10;
+    type Vec is array (S) of S;
+    procedure P (X : Vec := (for Idx in S => Idx));
+    procedure P (X : Vec := (for Idx in S => Idx)) is
+      begin null; end;

Questions? Ask the ACAA Technical Agent