CVS difference for ais/ai-00147.txt
--- ais/ai-00147.txt 1999/03/04 20:41:39 1.3
+++ ais/ai-00147.txt 1999/04/01 19:40:42 1.4
@@ -1,5 +1,6 @@
-!standard 07.06 (21) 99-02-23 AI95-00147/05
+!standard 07.06 (21) 99-03-25 AI95-00147/06
!class binding interpretation 96-06-06
+!status ARG Approved 6-0-2 99-03-26
!status work item 98-04-01
!status ARG Approved (with changes) 10-1-2 97-11-16
!status work item 5-1-4 96-10-07
@@ -9,7 +10,7 @@
!subject Optimization of Controlled Types
7.6(18-21) does not apply to limited controlled types. Thus, the
Initialize and Finalize calls will happen as described in other
@@ -18,16 +19,17 @@
For non-limited controlled types, the implementation permission of
RM-7.6(18-21) is extended as follows:
-An implementation is permitted to omit implicit Initialize, Adjust and Finalize
-calls and associated assignment operations on an object of non-limited controlled
- a) any change to the value of the object performed by these calls or
- assignment operations do not affect the external effect of any
- program execution, and
- b) any execution of the program that executes an Initialize or Adjust
- call on an object or initializes the object by an aggregate will
- also later execute a Finalize call on the object and will always do
- so prior to assigning a new value to the object.
+An implementation is permitted to omit implicit Initialize, Adjust and
+Finalize calls and associated assignment operations on an object of
+non-limited controlled type if
+ a) any usage of the value of the object after the implicit Initialize or
+ Adjust call and before any subsequent Finalize call on the object
+ does not affect the external effect of any program execution, and
+ b) after the omission of such calls and operations, any execution of
+ the program that executes an Initialize or Adjust call on an object
+ or initializes an object by an aggregate will also later execute a
+ Finalize call on the object and will always do so prior to assigning
+ a new value to the object.
This permission applies even if the implicit calls have additional effects.
@@ -200,7 +202,7 @@
to "temporary" named objects.
7.6(18-21) does not allow the elimination of Initialize/Finalize pairs
-- -- just Adjust/Finalize pairs, and then only on anonymous objects.
+-- just Adjust/Finalize pairs, and then only on anonymous objects.
For limited types, this is exactly what we want. Limited controlled
types are used, for example, to ensure properly matched calls, such as
@@ -252,7 +254,7 @@
implicit calls in situations where "properly written" Adjust and
Finalize procedures (i.e., there is no reliance on side-effects other
than changes to the value of the object itself) would have no
-discernable effects on the external effect of the program execution.
+discernible effects on the external effect of the program execution.
In any case, we want to preserve the duality of the calls and
guarantee that any program execution that executes an Initialize or
Questions? Ask the ACAA Technical Agent