CVS difference for ais/ai-00344.txt

Differences between 1.5 and version 1.6
Log of other versions for file ais/ai-00344.txt

--- ais/ai-00344.txt	2004/06/08 02:03:47	1.5
+++ ais/ai-00344.txt	2004/06/08 02:08:10	1.6
@@ -1,4 +1,4 @@
-!standard  3.09.01    (03)                             04-06-05  AI95-00344/02
+!standard  3.09.01    (03)                             04-06-07  AI95-00344/03
 !class amendment 03-08-07
 !status work item 04-02-29
 !status received 03-04-21
@@ -36,17 +36,21 @@
 
 !wording
 
-Modify 3.9(4) as follows:
+Replace 3.9(4) with:
+
+    The tag of a specific tagged type identifies the
+    full_type_declaration of the type, and for a type extension, is
+    sufficient to uniquely identify the type among all descendants
+    of the same ancestor. If a declaration for a tagged
+    type occurs within a generic_package_declaration, then the
+    corresponding type declarations in distinct instances of the generic
+    package are associated with distinct tags. For a tagged type that is
+    local to a generic package body and with any ancestors also
+    local to the generic body, the language does not specify
+    whether repeated instantiations of the generic body result in
+    distinct tags.
 
-    ... For a tagged type that is local to a generic package body {all of
-    whose ancestors are also local to the same generic body}, the
-    language does not specify whether repeated instantiations of the generic
-    body result in distinct tags. However, to ensure that all descendants
-    of a given type have distinct tgs, if any ancestor is declared outside the
-    generic body, the tag identifies the particular instance of the body.
-    Similarly, for a type declared at an accessibility level deeper than one
-    of its ancestor types (if any), the tag identifies the particular execution
-    of the enclosing master that elaborated the tagged type declaration.
+Modify 3.9(4) as follows:
 
   AARM NOTE: In most cases, a tag need only identify a particular tagged
     type declaration, and can therefore be a simple link-time-known
@@ -63,7 +67,9 @@
     typically be separated, one part as the first word of the object,
     the second placed in the first extension part that corresponds to a
     type declared more nested than its parent or declared in a shared
-    generic body when the parent is declared outside.
+    generic body when the parent is declared outside. Alternatively,
+    by using an extra level of indirection, the type Tag could remain
+    a single-word.
 
 Add after 3.9(7):
 
@@ -145,7 +151,7 @@
 
 With the proposal to add a number of generic packages to provide
 standard container abstractions, there has been growing concern about the rule
-precluding extending a type at a deeper accessibliity level. Because
+precluding extending a type at a deeper accessibility level. Because
 user-defined controlled types, user-defined storage pools, and
 user-defined streams are all implemented using type extension, this rule
 can interfere with natural use of generic data structures in nested
@@ -161,10 +167,10 @@
 For allocators, we disallow creating an object in a collection whose
 access type outlives the type identified by the object's tag.
 Similarly, for function return, we disallow returning a classwide object
-from a function if tag identifies a type declared at a deeper level than
+from a function if the tag identifies a type declared at a deeper level than
 the function. For similar reasons, we preclude T'Class'Input returning
 an object whose tag identifies a type that is declared at a deeper level
-than T. For symmetry, and to prevent writing something which cannot
+than T. For symmetry, and to prevent writing something that cannot
 later be meaningfully read, we preclude T'Class'Output writing out an
 item whose tag identifies a type of a deeper level than T.
 

Questions? Ask the ACAA Technical Agent