CVS difference for ai05s/ai05-0173-1.txt

Differences between 1.1 and version 1.2
Log of other versions for file ai05s/ai05-0173-1.txt

--- ai05s/ai05-0173-1.txt	2009/10/23 05:40:14	1.1
+++ ai05s/ai05-0173-1.txt	2010/08/06 04:20:33	1.2
@@ -1,6 +1,8 @@
-!standard  3.9(7.4/2)                                 09-10-22    AI05-0173-1/01
+!standard  3.9(7.4/2)                                 10-08-05    AI05-0173-1/02
 !standard  3.9(12.4/2)
 !class Amendment 09-10-22
+!status Amendment 2012 10-06-03
+!status ARG Approved  6-0-1  10-06-20
 !status work item 09-10-22
 !status received 09-08-10
 !priority Low
@@ -9,7 +11,7 @@
 
 !summary
 
-Add function Type_Is_Abstract to Ada.Tags.
+Add function Is_Abstract to Ada.Tags.
 
 !problem
 
@@ -28,18 +30,19 @@
 
 Add after 3.9(7.4/2):
 
-function Type_Is_Abstract (T : Tag) return Boolean;
+function Is_Abstract (T : Tag) return Boolean;
 
 Add after 3.9(12.4/2):
 
-The function Type_Is_Abstract returns True if the type whose tag is T is
+The function Is_Abstract returns True if the type whose tag is T is
 abstract, and False otherwise.
 
 !discussion
 
-The original suggestion was to add a function Is_Abstract. But this name is
-dubious: the parameter is a tag, but it is not the tag that is abstract; it
-is the type that the tag represents.
+The name of the function Is_Abstract is a bit dubious: the parameter is a tag,
+but it is not the tag that is abstract; it is the type that the tag represents.
+However, existing routines like Is_Descendant have the same problem, so we use
+the simplest name.
 
 Since other rules require raising of Tag_Error for tags that represent abstract
 types in Generic_Dispatching_Constructor, it must be the case that this
@@ -64,7 +67,7 @@
       begin
          if not Ada.Tags.Is_Descendant_At_Same_Level (Type_Tag, Root_Type'Tag) then
             raise Type_Error;
-         elsif not Ada.Tags.Type_Is_Abstract (Type_Tag) then
+         elsif not Ada.Tags.Is_Abstract (Type_Tag) then
             raise Type_Error;
          end if;
          if Factory.Map.Contains (Selector) then
@@ -74,9 +77,27 @@
       end Register;
 
 
---!corrigendum 3.9(7.4/2)
---!corrigendum 3.9(12.4/2)
+!corrigendum 3.9(7.4/2)
 
+@dinsa
+@xcode<@b<function> Interface_Ancestor_Tags (T : Tag) @b<return> Tag_Array;>
+@dinst
+@xcode<@b<function> Is_Abstract (T : Tag) @b<return> Boolean;>
+
+!corrigendum 3.9(12.4/2)
+
+@dinsa
+The function Interface_Ancestor_Tags returns an
+array containing the tag of each interface ancestor type of the type whose tag
+is T, other than T itself. The lower bound of the returned array is 1, and the
+order of the returned tags is unspecified. Each tag appears in the result
+exactly once. If the type whose tag is T has no interface ancestors,
+a null array is returned.
+@dinst
+The function Is_Abstract returns True if the type whose tag is T is
+abstract, and False otherwise.
+
+
 !ACATS test
 
 Add an ACATS C-Test to test the new function.
@@ -404,5 +425,4 @@
 the other suggested functions.
 
 ****************************************************************
-
 

Questions? Ask the ACAA Technical Agent