CVS difference for 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
@@ -7,6 +8,12 @@
@@ -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.
In an instance, a generic_formal_parameter_declaration declares a view
@@ -208,6 +262,9 @@
(Big_Integers.From_Universal_Image (Num) /
+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.
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.
+@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);>
@@ -380,6 +460,8 @@
See the conflict file for the changes.
+!comment The container changes are not shown here.
Questions? Ask the ACAA Technical Agent