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

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

--- ai12s/ai12-0068-1.txt	2014/02/09 23:00:29	1.3
+++ ai12s/ai12-0068-1.txt	2014/06/23 23:29:12	1.4
@@ -1,4 +1,4 @@
-!standard 3.10.2(7/3)                              14-02-09    AI12-0068-1/00
+!standard 3.10.2(7/3)                              14-06-23    AI12-0068-1/01
 !class binding interpretation 13-05-30
 !status work item 13-05-30
 !status received 13-04-20
@@ -9,8 +9,8 @@
 
 !summary
 
-The current instance of a subtype acts like an in-mode parameter during
-the specification of a predicate aspect.
+The current instance of a subtype acts like a value of the type, not as an
+object.
 
 !question
 
@@ -55,15 +55,20 @@
 
 !wording
 
-** TBD.
+Add after RM 8.6(17/3):
 
+  Within an aspect_specification for a type or subtype, the current
+  instance represents a value of the type; it is not an object. The
+  nominal subtype of this value is given by the subtype itself, prior to
+  applying any predicate specified directly on the subtype.
+
 !discussion
 
-Note that a current instance of a type and a subtype is a variable, since
-it is not in the list of things that denote constant views in 3.3. That list
-is supposed to be exhaustive (and we keep adding to it as things are missed).
-Moreover, it is clear a variable by practice, as the Rosen trick depends on
-that fact:
+Note that at the moment, a current instance of a type and a subtype is a
+variable, since it is not in the list of things that denote constant
+views in 3.3. That list is supposed to be exhaustive (and we keep adding
+to it as things are missed). Moreover, it is clear that it is a variable by
+practice, as the Rosen trick depends on that fact:
 
      type Outer;
      type Inner (Ref : access Outer) is limited null record;
@@ -78,25 +83,16 @@
 
 ---
 
-We select the model that the current instance of a subtype acts like an
+We considered the model that the current instance of a subtype acts like an
 in-mode parameter for the purposes of use in a predicate definition.
-
 This is the most information that a predicate should be allowed to use, as
 we want to allow compilers to implement a predicate as a Boolean function
-with a parameter of the base type of the subtype. If the semantics diverges
-too far from the parameter model, such an implementation would become
-difficult.
-
-An alternative semantics would be to define it as a constant value. In that
-case, even using object attributes within a predicate would be illegal.
-For instance, 'Size, 'Alignment, 'Access, and 'Address would all be illegal
-as their prefix would not denote an object.
-
-[Editor's note: Actually, the above sounds appealing, as "tricky" predicates
-would then be statically illegal and no one would get caught expecting some
-an example like the one in the question to work. OTOH, this is more work
-and might make some sensible predicates illegal (can't pass as an in out
-or out parameter, for instance). More thought required.]
+with a parameter of the base type of the subtype.
+
+But we chose to treat it as a constant value. By choosing this model,
+even using object attributes within a predicate are illegal.
+For instance, 'Size, 'Alignment, 'Access, and 'Address are all illegal
+as their prefix does not denote an object.
 
 !ACATS Test
 

Questions? Ask the ACAA Technical Agent