CVS difference for ais/ai-10260.txt

Differences between 1.12 and version 1.13
Log of other versions for file ais/ai-10260.txt

--- ais/ai-10260.txt	2005/10/31 05:18:46	1.12
+++ ais/ai-10260.txt	2005/12/15 02:44:22	1.13
@@ -3,6 +3,7 @@
 !standard  3.09  (12)
 !standard  3.09  (18)
 !standard  3.09  (25)
+!standard  3.09  (26)
 !standard  3.09  (30)
 !standard  3.09.02 (01)
 !standard  3.09.02 (02)
@@ -116,7 +117,8 @@
 include Descendant_Tag and Is_Descendant_At_Same_Level.]
 
 An instance of Tags.Generic_Dispatching_Constructor raises Tag_Error if
-The_Tag does not represent a concrete descendant of T.
+The_Tag does not represent a concrete descendant of T or if the
+innermost master of this descendant is not also a master of the instance.
 Otherwise, it dispatches to the primitive function denoted by the formal
 Constructor for the type identified by The_Tag, passing Params, and
 returns the result. Any exception raised by the function is propagated.
@@ -128,23 +130,35 @@
 
 Erroneous Execution
 
-If the internal tag provided to an instance of
-Tags.Generic_Dispatching_Constructor identifies a type that is not
-library-level and whose tag has
-not been created (see 13.14), or does not exist in the partition at the time of
-the call, execution is erroneous.
+If an internal tag provided to an instance of
+Tags.Generic_Dispatching_Constructor or to any subprogram declared in package
+Tags identifies either a type that is not library-level and whose tag has not
+been created (see 13.14), or a type that does not exist in the partition at the
+time of the call, then execution is erroneous.
 
 AARM Note: We exclude tags of library-level types from the current
 execution of the partition, because misuse of such tags should always be
-detected.
-T'Tag freezes the type (and thus creates the tag), and Internal_Tag and
-Descendant_Tag cannot return the tag of a library-level type that has not been
-created. Finally, library-level types never cease to exist. Thus, if the tag
-comes from a library-level type, there cannot be erroneous execution (the use
-of Descendant_Tag rather than Internal_Tag can help insure that the tag is of a
-library-level type). This is also similar to the rules for T'Class'Input (see
-13.13.2). [Note to readers, this also is found in AI-279.]
+detected. T'Tag freezes the type (and thus creates the tag), and Internal_Tag
+and Descendant_Tag cannot return the tag of a library-level type that has not
+been created. Finally, library-level types never cease to exist while the
+partition is executing. Thus, if the tag comes from a library-level type, there
+cannot be erroneous execution (the use of Descendant_Tag rather than
+Internal_Tag can help insure that the tag is of a library-level type). This is
+also similar to the rules for T'Class'Input (see 13.13.2). [Note to readers,
+this also is found in AI-279.]
+
+Replace 3.9(26) by:
+
+The implementation of Internal_Tag and Descendant_Tag may raise Tag_Error if no
+specific type corresponding to the string External passed as a parameter exists
+in the partition at the time the function is called, or if there is no such
+type whose innermost master is a master of the point of the function call.
 
+Implementation Advice
+
+Internal_Tag should return the tag of a type whose innermost master is the
+master of the point of the function call.
+
 Add after 3.9(30):
 
 The capability provided by Tags.Generic_Dispatching_Constructor is
@@ -629,17 +643,36 @@
 
 An instance of Tags.Generic_Dispatching_Constructor
 raises Tag_Error if The_Tag does not
-represent a concrete descendant of T.
+represent a concrete descendant of T or if the innermost master of this
+descendant is not also a master of the instance.
 Otherwise, it dispatches to the primitive function denoted by the formal
 Constructor for the type identified by The_Tag, passing Params, and
 returns the result. Any exception raised by the function is propagated.
 
 @i<@s8<Erroneous Execution>>
+
+If an internal tag provided to an instance of
+Tags.Generic_Dispatching_Constructor or to any subprogram declared in
+package Tags identifies either a type that is not library-level and whose
+tag has not been created (see 13.14), or a type that does not exist in the
+partition at the time of the call, then execution is erroneous.
+
+!corrigendum 3.9(26)
+
+@drepl
+The implementation of the functions in Ada.Tags may raise Tag_Error if no
+specific type corresponding to the tag passed as a parameter exists in the
+partition at the time the function is called.
+@dby
+The implementation of Internal_Tag and Descendant_Tag may raise Tag_Error if no
+specific type corresponding to the string External passed as a parameter exists
+in the partition at the time the function is called, or if there is no such
+type whose innermost master is a master of the point of the function call.
+
+@i<@s8<Implementation Advice>>
 
-If the internal tag provided to an instance of
-Tags.Generic_Dispatching_Constructor identifies a specific type whose
-tag has not been created (see 13.14), or does not exist in the partition at the
-time of the call, execution is erroneous.
+Internal_Tag should return the tag of a type whose innermost master is the
+master of the point of the function call.
 
 !corrigendum 3.9(30)
 

Questions? Ask the ACAA Technical Agent