CVS difference for ai05s/ai05-0230-1.txt
--- ai05s/ai05-0230-1.txt 2010/10/26 05:39:47 1.2
+++ ai05s/ai05-0230-1.txt 2010/11/17 00:48:50 1.3
@@ -1,6 +1,8 @@
-!standard 3.3.1(10) 10-10-25 AI05-0230-1/01
+!standard 3.3.1(10) 10-11-16 AI05-0230-1/02
!standard 3.3.1(21)
!class Amendment 10-10-25
+!status Amendment 2012 10-11-16
+!status ARG Approved 10-0-0 10-10-30
!status work item 10-10-25
!status received 10-10-25
!priority Low
@@ -9,7 +11,8 @@
!summary
-(See proposal.)
+Pre and Post aspects may not be specified for null procedures
+(Pre'Class and Post'Class may be used).
!problem
@@ -19,57 +22,51 @@
it would be possible to inherit two null procedures with different Pre or
Post aspects. Which one is executed then?
-
!proposal
-
+(See wording.)
!wording
-AI 05-00145 already includes a (not yet numbered) paragraph beginng with
- The Pre or Post aspect shall not be specified for an abstract
- subprogram.
+Modify 13.3.2(9/3) [added by AI05-0145-2]:
-Add the following to the end of that paragraph:
- The Pre or Post aspect shall not be specified for a
- primitive subprogram of an interface type.
-
-Replace 8.3(12.2/2)
- If at least one is a subprogram that is neither a null procedure nor
- an abstract subprogram, and does not require overriding (see 3.9.3),
- then they override those that are null procedures, abstract
- subprograms, or require overriding. If more than one such homograph
- remains that is not thus overridden, then they are all hidden from
- all visibility.
-
-with
- An ineffective procedure is defined to be a null procedure which
- is a primitive operation of an interface type, or an inherited
- subprogram which corresponds (see 3.4) to an ineffective procedure.
-
- If at least one is a subprogram that is neither an ineffective
- procedure nor an abstract subprogram, and does not require
- overriding (see 3.9.3), then they override those that are ineffective
- procedures, abstract subprograms, or require overriding. If more than
- one such homograph remains that is not thus overridden, then they
- are all hidden from all visibility.
-
-We should probably also replace the two occurrences of "null procedure"
-in the next paragraph with "ineffective procedure", but this isn't strictly
-needed.
+ The Pre or Post aspect shall not be specified for an abstract
+ subprogram {or a null procedure}. Redunant[Only the Pre'Class
+ and Post'Class aspects may be specified for such a subprogram.]
!discussion
+
+We could try to allow Pre and Post on concrete null procedures and give such
+subprograms preference over those inherited from interfaces. But since a
+null procedure doesn't do anything, we can't quite imagine what the Pre and
+Post aspects would be useful for. One example was suggested (to prevent calls)
+seems to be pushing to runtime a check that ought to be done at compile-time
+(by declaring the subprogram abstract). Since the uses are mostly hacks,
+we decide that it isn't worth the effort to allow these ever.
-Are there more cases where we use some mechanism (e.g., a pragma or an aspect
-specification) to cause implicit code generation for a subprogram. pragma
+
+We don't know of any other cases where we use some mechanism (e.g., a pragma or an aspect
+specification) to cause implicit code generation for a subprogram. Pragma
No_Return is forbidden for a null procedure and an Invariant aspect
specification is illegal for an abstract type (which includes interface types),
so these are not problems.
+!corrigendum 13.3.2(0)
+
+@dinsc
+
+For a subprogram or entry, the following language-defined aspects may
+be specified with an @fa<aspect_specification>:
+[Just to force a conflict, the real text will be in the conflict file.]
!ACATS test
+An ACATS B-Test is needed.
+
+!ASIS
+
+There is no ASIS effect to this rule.
!appendix
Questions? Ask the ACAA Technical Agent