CVS difference for arm/source/03b.mss

Differences between 1.34 and version 1.35
Log of other versions for file arm/source/03b.mss

--- arm/source/03b.mss	2004/11/25 03:12:16	1.34
+++ arm/source/03b.mss	2004/12/02 05:47:55	1.35
@@ -1,9 +1,9 @@
 @Part(03, Root="ada.mss")
-@Comment{$Date: 2004/11/25 03:12:16 $}
+@Comment{$Date: 2004/12/02 05:47:55 $}
 @Comment{$Source: e:\\cvsroot/ARM/Source/03b.mss,v $}
-@Comment{$Revision: 1.34 $}
+@Comment{$Revision: 1.35 $}
 @LabeledClause{Array Types}
@@ -2580,8 +2580,11 @@
 This paragraph ensures that a dispatching call will never
 attempt to execute an inaccessible subprogram body.
-The part about generic bodies is necessary in order to preserve the
-contract model.
+@ChgNote{This rule is only about generic bodies (and always was only
+about generic bodies. So we drop the extra text.}
+@Chg{Version=[2],New=[This],Old=[The part about generic bodies]} is necessary
+in order to preserve the contract model.
 @Chg{Version=[2],New=[If an ancestor],Old=[Since a generic unit can be instantiated at a
@@ -2788,6 +2791,7 @@
 @LabeledSubClause{Dispatching Operations of Tagged Types}
 @RootDefn{dispatching operation}
 @Defn2{Term=[dispatching call], Sec=(on a dispatching operation)}
 @Defn2{Term=[nondispatching call], Sec=(on a dispatching operation)}
@@ -2797,7 +2801,8 @@
 @Defn{run-time polymorphism}
 @Defn2{Term=[controlling tag], Sec=(for a call on a dispatching operation)}
 The primitive subprograms of a tagged type are called
-@i(dispatching operations).
+@i(dispatching operations)@Chg{Version=[2],New=[, as are subprograms
+declared by a @nt{formal_abstract_subprogram_declaration}],Old=[]}.
 @Redundant[A dispatching operation can be called using a statically
 determined @i{controlling} tag, in which case the body to be
 executed is determined at compile time.
@@ -2827,11 +2832,14 @@
 @Defn{call on a dispatching operation}
 @Defn{dispatching operation}
 A @i{call on a dispatching operation} is a call whose @nt<name> or
 @nt<prefix> denotes the declaration of a primitive subprogram
-of a tagged type, that is, a dispatching operation.
+of a tagged type@Chg{Version=[2],New=[ or a subprogram declared by
+a @nt{formal_abstract_subprogram_declaration}],Old=[]},
+that is, a dispatching operation.
 @Defn{controlling operand}
 A @i{controlling operand} in a call on a dispatching operation of a tagged
 type @i(T) is one whose corresponding formal parameter is of type @i(T)
@@ -3269,6 +3277,11 @@
 inherited by derived subprograms. A literal reading of the old wording
 would have implied that operations would be called with objects with the
 wrong type.],Old=[]}
+@Chg{Version=[2],New=[An abstract formal subprogram is a dispatching
+operation, even though it is not a primitive operation. See
+@RefSec{Formal Subprograms}.],Old=[]}
@@ -3340,10 +3353,13 @@
   and this tag will necessarily be different from T'Tag.
 @Defn{abstract subprogram}
 @Defn2{Term=[subprogram], Sec=(abstract)}
 A subprogram declared by an @nt{abstract_subprogram_declaration}
-(see @RefSecNum{Subprogram Declarations}) is an @i{abstract subprogram}.
+(see @RefSecNum{Subprogram Declarations}) @Chg{Version=[2],New=[or declared
+declared by a @nt{formal_abstract_subprogram_declaration} (see
+@RefSecNum{Formal Subprograms}) ],Old=[]}is an @i{abstract subprogram}.
 If it is a primitive subprogram of a tagged type,
 then the tagged type shall be abstract.
@@ -3364,7 +3380,6 @@
 but has an abstract operation Foo,
 which is illegal.
 The two lines marked "--@i{ Illegal!}" are illegal when taken together.
 @Leading@;We considered disallowing untagged types from having abstract
@@ -3393,6 +3408,13 @@
 but the current ones seem like the simplest.
+@Chg{Version=[2],New=[Note that the second sentence does not apply to
+abstract formal subprograms, as they are never primitive operations of
+a type.],Old=[]}
 @Chg{Version=[2],New=[If a type has an implicitly declared primitive subprogram
 that is inherited or is the predefined equality operator, and the corresponding
@@ -3595,19 +3617,22 @@
 the example would be legal as is.
-A generic actual subprogram shall not be an abstract subprogram.
+A generic actual subprogram shall not be an abstract
+subprogram @Chg{Version=[2],New=[unless the generic formal subprogram is a
 The @nt{prefix} of an @nt{attribute_reference} for the Access,
-Unchecked_Access, or Address attributes shall not denote an abstract
+Unchecked_Access, or Address attributes shall not denote an abstract subprogram.
 An @nt{abstract_subprogram_declaration} is not syntactically a
 Nonetheless, an abstract subprogram is a subprogram,
-and an @nt{abstract_subprogram_declaration} is a declaration of a
+and an @nt{abstract_subprogram_declaration} is a declaration of a subprogram.
 The part about generic actual subprograms includes those given by
+default.@Chg{Version=[2],New=[ Of course, an abstract formal subprogram's
+actual subprogram can be abstract.],Old=[]}
@@ -3685,6 +3710,10 @@
 @Chg{Version=[2],New=[Updated the wording to reflect the addition of
 interfaces (see @RefSecNum{Interface Types}).],Old=[]}
+@Chg{Version=[2],New=[Updated the wording to reflect the addition of
+abstract formal subprograms (see @RefSecNum{Formal Subprograms}).],Old=[]}
 @Chg{Version=[2],New=[Clarified the wording of shall-be-overridden so that it
 clearly applies to abstract predefined equality.],Old=[]}
@@ -5109,6 +5138,10 @@
 is the same as that of
 its ultimate ancestor.
+@Chg{Version=[2],New=[The accessibility level of the anonymous access type
+defined by an @nt{access_definition} of an @nt{object_declaration} is
+the same as that of the declared object.],Old=[]}
 @Chg{Version=[2],New=[The accessibility level of the anonymous access type
@@ -5992,7 +6025,7 @@
 @Chg{Version=[2],New=[Defined the accessibility of the various new kinds and
 uses of anonymous access types.],Old=[]}

Questions? Ask the ACAA Technical Agent