CVS difference for ai05s/ai05-0115-1.txt
--- ai05s/ai05-0115-1.txt 2011/04/22 03:17:04 1.15
+++ ai05s/ai05-0115-1.txt 2011/05/14 07:21:26 1.16
@@ -1,6 +1,10 @@
-!standard 4.3.2(5/2) 11-04-20 AI05-0115-1/10
+!standard 3.9(12.2/2) 11-05-14 AI05-0115-1/11
+!standard 4.3.2(5/2)
+!standard 4.6(21/2)
+!standard 4.6(24/2)
!standard 7.3.1(5/1)
!class binding interpretation 08-10-15
+!status Amendment 2012 11-05-14
!status work item 08-10-15
!status received 08-07-25
!priority Medium
@@ -108,8 +112,9 @@
!wording
-Add after 3.9(12.2):
+Add after 3.9(12.2/2):
+
For the purposes of the dynamic semantics of functions Descendant_Tag
and Is_Descendant_At_Same_Level, a tagged type T2 is a /descendant/ of
a type T1 if it is the same as T1, or if its parent type or one of its
@@ -377,6 +382,20 @@
Note that X5 through X8 are arguably legal by the Ada 2005 rules.
+!corrigendum 03.09(12.2/2)
+
+@dinsa
+The function Is_Descendant_At_Same_Level returns True if the Descendant tag
+identifies a type that is both a descendant of the type identified
+by Ancestor and at the same accessibility level. If not, it returns False.
+@dinst
+For the purposes of the dynamic semantics of functions Descendant_Tag
+and Is_Descendant_At_Same_Level, a tagged type T2 is a @i<descendant> of
+a type T1 if it is the same as T1, or if its parent type or one of its
+progenitor types is a descendant of type T1 by this rule,
+even if at the point of the declaration of T2, one of the derivations
+in the chain is not visible.
+
!corrigendum 4.3.2(5/2)
@drepl
@@ -388,15 +407,37 @@
record extensions (and no private extensions).
@dby
If the @fa<ancestor_part> is a @fa<subtype_mark>, it shall denote a specific
-tagged subtype, and it shall not denote a type with unknown discriminants.
-If the @fa<ancestor_part> is an @fa<expression>, it shall
+tagged subtype. If the @fa<ancestor_part> is an @fa<expression>, it shall
not be dynamically tagged. The type of the @fa<extension_aggregate> shall
-be a descendant of the type of the @fa<ancestor_part>, through one or more
-record extensions (and no private extensions).
+be a descendant of the type of the @fa<ancestor_part> (the @i<ancestor> type),
+through one or more record extensions (and no private extensions).
If the @fa<ancestor_part> is a @fa<subtype_mark>, the view
of the ancestor type from which the type is descended (see 7.3.1)
shall not have unknown discriminants.
+!corrigendum 4.6(21/2)
+
+@drepl
+If there is a type that is an ancestor of both the target type and the
+operand type, or both types are class-wide types, then at least
+one of the following rules shall apply:
+@dby
+If there is a type (other than a root numeric type) that is an
+ancestor of both the target type and the operand type, or both types
+are class-wide types, then at least one of the following rules shall
+apply:
+
+!corrigendum 4.6(24/2)
+
+@drepl
+If there is no type that is the ancestor of both the target type and the
+operand type, and they are not both class-wide types, one of the following
+rules shall apply:
+@dby
+If there is no type (other than a root numeric type) that is the
+ancestor of both the target type and the operand type, and they are
+not both class-wide types, one of the following rules shall apply:
+
!corrigendum 7.3.1(5/1)
@dinsa
@@ -405,7 +446,7 @@
some later place immediately within the declarative region in which the array
type is declared. In such a case, the predefined "=" operator is implicitly
declared at that place, and assignment is allowed after that place.
-@dinst
+@dinss
A type is a @i<descendant> of the full view of some ancestor of its
parent type only if the current view it has of its parent is a
descendant of the full view of that ancestor. More generally, at any
@@ -415,6 +456,17 @@
and, for example, whether the type is considered to be
a descendant of a record type, or a descendant only through record
extensions of some more distant ancestor.
+
+It is possible for there to be places where a derived
+type is visibly a descendant of an ancestor type, but not a
+descendant of even a partial view of the ancestor type, because the parent
+of the derived type is not visibly a descendant of the ancestor. In
+this case, the derived type inherits no characteristics from that
+ancestor, but nevertheless is within the derivation class of the
+ancestor for the purposes of type conversion, the "covers"
+relationship, and matching against a formal derived type. In this
+case the derived type is considered to be a @i<descendant> of an
+incomplete view of the ancestor.
!ACATS Test
Questions? Ask the ACAA Technical Agent