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

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

--- ai12s/ai12-0407-1.txt	2020/11/28 07:41:17	1.2
+++ ai12s/ai12-0407-1.txt	2020/12/04 07:59:30	1.3
@@ -1,4 +1,5 @@
-!standard 12.3(15)                                      20-11-27  AI12-0407-1/02
+!standard 3.3(21)                                      20-12-03  AI12-0407-1/03
+!standard 12.3(15)
 !standard 13.1(8/5)
 !standard 13.1(8.1/3)
 !standard 13.1.1(17/5)
@@ -7,6 +8,12 @@
 !standard A.5.6(15/5)
 !standard A.5.7(3/5)
 !standard A.5.7(16/5)
+!standard A.18.2(79.2/5)
+!standard A.18.3(50.2/5)
+!standard A.18.5(37.3/5)
+!standard A.18.6(51.4/5)
+!standard A.18.8(58.2/5)
+!standard A.18.9(74.2/5)
 !standard H.4.1(1/5)
 !standard H.4.1(3/5)
 !standard H.4.1(4/5)
@@ -39,6 +46,12 @@
 (6) We allow aspects to differ for the replicated actual of a generic formal 
+(7) If a name denoting the current instance of a type denotes an object (as
+opposed to a value) then it denotes a variable view of the object.
+(8) Stable views of containers do not have Aggregate aspects (and consequently
+do not support aggregates).
 (1) AI12-0394-1 added a mechanism to use named numbers with user-defined 
@@ -78,6 +91,29 @@
 additional Pre and Post assertions to generic formal subprograms, but there
 is no allowance for this difference in 12.3(15).
+(7) The list of variable objects in 3.3 (created by AI12-0392-1 as the inverse
+of the previous list) does not mention the current instance of a type. That 
+would seem to imply that the following commonly-used idiom is illegal because
+the 'Access attribute reference is of an access-to-variable type:
+    package Pkg is
+        type T;
+        type T_Ref (Ref : access T) is null record;
+        type T is limited record
+          Self : T_Ref (T'Access);
+        end record;
+     end Pkg;
+The previous list assumed that all current instances of types and subtypes 
+were variables, but 8.6(17.1/5) says that current instances in aspect 
+specifications represent values (which necessarily are constants).
+(8) A stable view of a container is intended to eliminate the need for 
+tampering checks by ensuring that no operations that tamper (change the
+size of the container) are supported. This includes Append and Insert.
+However, the stable view types include Aggregate aspects that call
+non-existent Append and Insert routines. That doesn't make sense.
 (1) Add renamings of From_String to From_Universal_Image to both the 
@@ -102,12 +138,30 @@
 (6) Add an exception to explicitly defined differences for a generic formal
 parameter in an instance.
+(7) 8.6(17-17.1) defines some current instances as objects, and others as 
+values. The objects should be variable objects, while the values are not 
+objects at all and thus cannot be variable. We word the new bullet to reflect 
+(8) Remove the aggregate aspects from the stable view type declarations.
 [Editor's note: These changes were applied to Draft 27 of the Ada 202x RM, 
 even though they have not yet been approved, in order that that draft be as
 accurate as possible.]
+Replace the deleted 3.3(21) with:
+   * the current instance of a type other than a protected type@Redundant[, 
+     if the current instance is an object and not a value (see 8.6)];
+     AARM Reason: We exclude current instances of protected types 
+       as they are protected units and the next bullet applies.
+     AARM Proof: This list of bullets only applies to views of objects,
+     so current instances that are not objects are not considered here.
 Modify 12.3(15):
 In an instance, a generic_formal_parameter_declaration declares a view 
@@ -208,6 +262,9 @@
      (Big_Integers.From_Universal_Image (Num) /
       Big_Integers.From_Universal_Image (Den));
+In A.18.2(79.2/5), A.18.3(50.2/5), A.18.5(37.3/5), A.18.6(51.4/5), 
+A.18.8(58.2/5), A.18.9(74.2/5), remove the Aggregate aspect.
 Modify H.4.1(4/5):
 If No_Controlled_Parts is True for a type, no component of the type shall have 
@@ -277,6 +334,29 @@
 that we don't have to revisit this paragraph when defining aspects or other
 characteristics in the future.
+(7) We do not want to repeat any of 8.6 in 3.3, it's too messy. So we just
+refer to it to avoid confusion.
+The list in 3.3 is roughly in the order that the concepts appear in the
+Standard. So we put "current instance of a type" (from 8.6) before
+"current instance of a protected unit" (mostly 9.4). We exclude protected
+types from the new bullet -- the protected unit rule applies to them.
+(8) Container aggregates are generally built up element-by-element into an 
+empty container. (Only the indexed aggregates work differently.) This is
+incompatible with the intent of a stable view, which never changes length
+as long as the stable view exists. As such, the only choice is to remove
+the Aggregate attributes.
+!corrigendum 3.3(21/3)
+@xbullet<the object denoted by a @fa<function_call> or an @fa<aggregate>;>
+@xbullet<the current instance of a type other than a protected type, 
+if the current instance is an object and not a value (see 8.6);>
 !corrigendum 12.3(15)
@@ -380,6 +460,8 @@
 See the conflict file for the changes.
+!comment The container changes are not shown here.
 !corrigendum H.7.1(0)

Questions? Ask the ACAA Technical Agent