--- ai12s/ai12-0170-1.txt 2016/06/08 02:16:07 1.7 +++ ai12s/ai12-0170-1.txt 2016/07/22 04:34:05 1.8 @@ -1,8 +1,9 @@ -!standard 3.9.3(7) 16-06-04 AI12-0170-1/03 +!standard 3.9.3(7) 16-07-21 AI12-0170-1/04 !standard 6.1.1(7/4) !standard 6.1.1(18.2/4) -!standard 7.3.2(5/4) !class binding interpretation 15-06-17 +!status Amendment 1-2012 16-07-21 +!status ARG Approved 9-0-2 16-06-11 !status work item 15-06-17 !status received 15-06-15 !priority Low @@ -78,18 +79,6 @@ descendant of T {Redundant[(including T itself)]}. The corresponding expression is constructed from the associated expression as follows: -Modify 7.3.2(5/4): - -Within an invariant expression, the identifier of the first subtype of the -associated type denotes the current instance of the type. Within an invariant -expression for the Type_Invariant aspect of a type T, the type of this current -instance is T. Within an invariant expression for the Type_Invariant'Class -aspect of a type T, the type of this current instance is interpreted as though -it had a (notional) {nonabstract} type NT that is a visible formal derived -type whose ancestor type is T. The effect of this interpretation is that the -only operations that can be applied to this current instance are those defined -for such a formal derived type. - !discussion The existing wording was essentially correct as written, but we have @@ -174,9 +163,45 @@ But this isn't allowed because the corresponding expression for Abs_T itself is illegal (courtesy of 3.9.3(7)). + +!corrigendum 6.1.1(7/4) -[Author's note: We don't seem to define a "corresponding expression" for -Type_Invariant'Class -- should we?] +@drepl +Within the expression for a Pre'Class or Post'Class aspect for a primitive +subprogram @i<S> of a tagged type @i<T>, a @fa<name> that denotes a formal +parameter (or @i<S>'Result) of type @i<T> is interpreted as though it +had a (notional) type @i<NT> that is a formal derived type whose ancestor type +is @i<T>, with directly visible primitive operations. Similarly, a @fa<name> +that denotes a formal access parameter (or @i<S>'Result) of type access-to-@i<T> +is interpreted as having type access-to-@i<NT>. The result of this +interpretation is that the only operations that can be applied to such +@fa<name>s are those defined for such a formal derived type. +@dby +Within the expression for a Pre'Class or Post'Class aspect for a primitive +subprogram @i<S> of a tagged type @i<T>, a @fa<name> that denotes a formal +parameter (or @i<S>'Result) of type @i<T> is interpreted as though it had a +(notional) nonabstract type @i<NT> that is a formal derived type whose ancestor +type is @i<T>, with directly visible primitive operations. Similarly, a @fa<name> +that denotes a formal access parameter (or @i<S>'Result) of type access-to-@i<T> +is interpreted as having type access-to-@i<NT>. The result of this +interpretation is that the only operations that can be applied to such +@fa<name>s are those defined for such a formal derived type. + +!corrigendum 6.1.1(18/4) + +@drepl +If a Pre'Class or Post'Class aspect is specified for a primitive +subprogram @i<S> of a tagged type @i<T>, or such an aspect defaults to +True, then a corresponding expression also applies to the corresponding +primitive subprogram @i<S> of each descendant of @i<T>. The @i<corresponding +expression> is constructed from the associated expression as follows: +@dby +If a Pre'Class or Post'Class aspect is specified for a primitive +subprogram @i<S> of a tagged type @i<T>, or such an aspect defaults to +True, then a corresponding expression also applies to the corresponding +primitive subprogram @i<S> of each descendant of @i<T> (including @i<T> itself). +The @i<corresponding expression> is constructed from the associated expression +as follows: !ASIS

Questions? Ask the ACAA Technical Agent