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

Differences between 1.8 and version 1.9
Log of other versions for file ai12s/ai12-0191-1.txt

--- ai12s/ai12-0191-1.txt	2019/02/23 02:17:47	1.8
+++ ai12s/ai12-0191-1.txt	2019/02/23 02:26:19	1.9
@@ -1,4 +1,4 @@
-!standard 3.9.1(4.1/2)                                      19-02-21  AI12-0191-1/05
+!standard 3.9.1(4.1/2)                                      19-02-22  AI12-0191-1/06
 !standard 7.3.2(10.1/4)
 !standard 7.3.2(15/5)
 !class binding interpretation 16-06-06
@@ -31,8 +31,8 @@
   components that are not visible. On the other hand, a reference
   to the components of an object in a dynamic semantics rule would
   apply to all components of the object, visible or not, including
-  (for tagged objects) components which are hidden by the nominal
-  tag of the object (see 3.9.1). Other terms, such as "subcomponent"
+  (for tagged objects) components which are not components of the nominal
+  type of the object (see 3.9.1). Other terms, such as "subcomponent"
   and "part", are interpreted analogously.
 
 Add after 3.9.1(4.1/2):
@@ -41,12 +41,13 @@
   tagged type T1 or T1'Class and the (runtime) tag of X is T2'Tag,
   the components (if any) of X which are not components of T1
   (and which are not discriminants which correspond to a discriminant
-  of T1) are said to be "hidden by the nominal tag" of the object.
+  of T1) are said to not be "components of the nominal type" of the object.
   For example, if T2 is an
   undiscriminated extension of T1 which declares a component named Comp,
-  then X.Comp would be hidden by the nominal tag of X.
-  Similarly, a part or a subcomponent of an object might or might not be
-  hidden by the nominal tag of the object.
+  then X.Comp is not a component of the nominal type of X.
+  Similarly, a part (respectively, subcomponent) of an object might or might
+  not be a part (respectively, subcomponent) of the nominal type of
+  the object.
 
   AARM note: For example, there is a dynamic semantics rule that
   finalization of an object includes finalization of its components
@@ -57,35 +58,35 @@
      function Func return T1'Class is (T2'(others => <>));
      X : T1'Class := Func;
   the rule that "every component of the object is finalized" (as opposed to
-  something like "every component of the object except those hidden by
-  the nominal tag of the object is finalized")
+  something like "every component of the object that is a component of the
+  object's nominal type is finalized")
   means that the finalization of X will include finalization of X.Comp.
   For another example, see the rule about accessibility checking of
   access discriminants of parts of function results in 6.5.
   In contrast, the rules in 7.3.2 explicitly state that type invariant
   checks are only performed for parts which are of the type-invariant bearing
-  type and which not hidden by the nominal tag of the object (as opposed to
-  for all parts, whether hidden by the nominal tag or not, which are of
-  that type). Similarly, the rule in 13.13.2 governing
+  type and which are parts of the nominal type of the object (as opposed to
+  for all parts, whether part of the nominal type or not, which are of
+  the invariant-bearing type). Similarly, the rule in 13.13.2 governing
   which components of a composite value are read and written by the
   default implementations of Read and Write for a composite type states that
-  only the components of the object which are not hidden by the nominal
-  tag of the object are read or written.
+  only the components of the object which are components of the nominal
+  type of the object are read or written.
 
 Modify 7.3.2(10.1/4):
 
    After successful explicit initialization of the completion of a deferred 
-   constant with a part of type T {that is not hidden by the nominal tag of 
-   the object}, if the completion is inside the immediate scope of the 
+   constant with a part of type T {that is a part of the nominal
+   type of the constant}, if the completion is inside the immediate scope of the 
    full view of T, and the deferred constant is visible outside the immediate 
-   scope of T, the check is performed on the part(s) of type T{ that are
-   not hidden by the nominal tag of the object};
+   scope of T, the check is performed on the part(s) of type T{that are
+   parts of the nominal type of the object};
 
 Modify 7.3.2(15/5):
 
    Upon a successful return from a call on any subprogram or entry which is 
    type-invariant preserving for T, an invariant check is performed on each
-   part of type T{ that is not hidden by the nominal tag of the object} which 
+   part of type T{ that is a part of the nominal type of the object} which 
    is subject to an invariant check for T.
    In the case of a call to a protected operation, the check is performed 
    before the end of the protected action. In the case of a call to a task
@@ -98,9 +99,9 @@
      some future extension component might have type T (contrast this to
      finalization, where we do intend that overhead). 
 with:
-     Reason: The various rules requiring type invariant checks only for parts of
-     type T which are not hidden by the nominal tag of the object, as opposed
-     to all parts of type T (whether hidden by the nominal tag or not),
+     Reason: The various rules requiring type invariant checks only for parts
+     of type T which are parts of the nominal type of the object, as opposed
+     to all parts of type T (whether part of the nominal type or not),
      are motivated by a desire to avoid overhead associated with the
      possibility that there *might* exist an extension of the tagged type
      in question that has a part of type T.
@@ -108,7 +109,8 @@
 
 Modify in 13.13.2(9/3):
    ... the Write or Read attribute for each component (excluding those,
-   if any, that are hidden by the nominal tag of the object) is called ...
+   if any, that are not components of the nominal type of the object) is 
+   called ...
 
 !discussion
 
@@ -998,6 +1000,103 @@
 ****************************************************************
 
 From: Tucker Taft
-Sent: Thursday, February 21, 2019  11:02 AM
+Sent: Friday, February 22, 2019  11:49 AM
+
+...
+> when we are deciding what type invariant checks to perform as part of 
+> a return from Foo, X.T2 is a component of the view of X.
+
+I presume you meant "T1 is a component of the view of X."  And yes, I can see 
+how partial views and the notion of "view" inherent in a "view conversion" 
+could get confused with one another.
+ 
+> To me, it seems clear that if we are at a point when we can see only 
+> the partial view of P2.T2, then saying that X.T2 is a component of the 
+> view of X will lead to confusion or worse.
+
+Again, I presume you meant "... saying that T1 is a component of the view of 
+X will lead ..."
+ 
+> So I used a different phrase in the attached v4 variant ("hidden by 
+> the nominal tag").
+
+Hmm..  You are bringing back the notion of "hiding" and introducing the 
+notion of a "nominal tag."  "Nominal tag" seems like a strange combination, 
+because the tag is a run-time concept and never changes in the lifetime of 
+the object.  I could see using the term "nominal type" where "nominal" is what 
+is expressing the notion of "view," and "type" is what determines what 
+components are relevant.  So I would suggest "part of the nominal type" or 
+"components of the nominal type" both of which seem unambiguous.
+
+****************************************************************
+
+From: Steve Baird
+Sent: Friday, February 22, 2019  11:58 AM
+
+>    So I would suggest "part of the nominal type" or "components of the 
+> nominal type" both of which seem unambiguous.
+
+Sounds good to me.
+
+I'll try to produce a version using this phrasing.
+
+****************************************************************
+
+From: Steve Baird
+Sent: Friday, February 22, 2019  2:59 PM
+
+See attached. [This is version /06 of the AI - Editor.]
+
+This still suffers from the same problem I complained about (and thanks, Tuck, 
+for deciphering the typos in my complaint) with the "part of the current view" 
+phrasing (that was version v3).
+That is, there seems to be some misleading (at best) confusion with 
+visibility/privacy rules, but this seems slightly better than that earlier v3 
+version.
+
+****************************************************************
+
+From: Tucker Taft
+Sent: Friday, February 22, 2019  11:49 AM
+
+****************************************************************
+
+From: Tucker Taft
+Sent: Friday, February 22, 2019  11:49 AM
+
+****************************************************************
+
+From: Tucker Taft
+Sent: Friday, February 22, 2019  11:49 AM
+
+****************************************************************
+
+From: Tucker Taft
+Sent: Friday, February 22, 2019  11:49 AM
+
+****************************************************************
+
+From: Tucker Taft
+Sent: Friday, February 22, 2019  11:49 AM
+
+****************************************************************
+
+From: Tucker Taft
+Sent: Friday, February 22, 2019  11:49 AM
+
+****************************************************************
+
+From: Tucker Taft
+Sent: Friday, February 22, 2019  11:49 AM
+
+****************************************************************
+
+From: Tucker Taft
+Sent: Friday, February 22, 2019  11:49 AM
+
+****************************************************************
+
+From: Tucker Taft
+Sent: Friday, February 22, 2019  11:49 AM
 
 ****************************************************************

Questions? Ask the ACAA Technical Agent