CVS difference for ais/ai-00279.txt

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

--- ais/ai-00279.txt	2002/06/12 00:36:45	1.5
+++ ais/ai-00279.txt	2003/03/04 04:56:22	1.6
@@ -1,4 +1,4 @@
-!standard  13.13.02 (34)                              02-06-11  AI95-00279/02
+!standard  13.13.02 (34)                              03-02-20  AI95-00279/03
 !standard  3.09 (12)
 !standard  13.13.02 (36/1)
 !class binding interpretation 01-12-21
@@ -44,8 +44,8 @@
 
 Add to 3.9(12):
 
-Tag_Error is raised if the specific type identified has never been frozen in
-the partition.
+Tag_Error is also raised if the specific type identified is a library-level
+type whose freezing point has not yet been elaborated.
 
 Add to 13.13.2(34):
 
@@ -56,14 +56,16 @@
 
 Erroneous Execution
 
-If the internal tag provided to T'Class'Input identifies a specific type that
-does not exist or has been elaborated but not frozen, execution is erroneous.
+If the internal tag provided to T'Class'Input identifies a specific type whose
+freezing point has not been elaborated, or does not exist in the partition at
+the time of the call, execution is erroneous.
 
+
 AARM Note
 
 The definition of Internal_Tag prevents such a tag from being provided to
-T'Class'Input. However, this is needed for nested tagged types and potentially
-for user-provided 'Tag_Read routines.
+T'Class'Input if T is a library-level type. However, this is needed for nested
+tagged types and potentially for user-provided 'Tag_Read routines.
 
 !discussion
 
@@ -97,7 +99,8 @@
 If the tag dispatched on is for a type that has not yet been frozen, we could
 have an access-before-elaboration problem. Making a check in this case could
 be difficult. The type may be nested, or not even declared yet, so the normal
-solution of associated a Boolean value with the type does not work.
+implementation solution of associating a Boolean value with the type does not
+work.
 
 Thus, the only practical solution is for the use of such a tag to be erroneous.
 This is a rather unfortunate case of erroneousness, however, since it requires
@@ -122,9 +125,9 @@
 
 However, nested tagged types are exceedingly rare. We do not lose much by not
 covering them. Therefore, we adopt the rule that Internal_Tag must raise
-Tag_Error if the string identifies a type that has never been frozen in the
-partition. This rule allows a single Boolean value to be used, and does not
-have any race conditions.
+Tag_Error if the string identifies a library-level type whose freezing
+point has not been elaborated. This rule allows a single Boolean value to be
+used, and does not have any race conditions.
 
 With this rule, the erroneous case can only occur for nested tagged types (that
 is, a tagged type not declared at the library-level). For any library-level
@@ -148,7 +151,8 @@
 The function Internal_Tag returns the tag that corresponds to the given
 external tag, or raises Tag_Error if the given string is not the external tag
 for any specific type of the partition. Tag_Error is also raised if the
-specific type identified has never been frozen in the partition.
+specific type identified is a library-level type whose freezing point has not
+yet been elaborated.
 
 !corrigendum 13.13.02(34)
 
@@ -163,7 +167,7 @@
 corresponding internal tag (by calling Tags.Internal_Tag(String'Input(@i<Stream>))
 -- see 3.9) and then dispatches to the subprogram denoted by the Input
 attribute of the specific type identified by the internal tag; returns that
-result. If the specific type identifed by the internal tag is not covered by
+result. If the specific type identified by the internal tag is not covered by
 T'Class or is abstract, Constraint_Error is raised.>
 
 !corrigendum 13.13.02(36/1)
@@ -182,8 +186,9 @@
 @dinst
 @i<@s8<Erroneous Execution>>
 
-If the internal tag provided to T'Class'Input identifies a specific type that
-does not exist or has been elaborated but not frozen, execution is erroneous.
+If the internal tag provided to T'Class'Input identifies a specific type whose
+freezing point has not been elaborated, or does not exist in the partition at
+the time of the call, execution is erroneous.
 
 !ACATS test
 

Questions? Ask the ACAA Technical Agent