CVS difference for ais/ai-00083.txt

Differences between 1.12 and version 1.13
Log of other versions for file ais/ai-00083.txt

--- ais/ai-00083.txt	2000/06/21 23:39:07	1.12
+++ ais/ai-00083.txt	2000/07/15 02:29:55	1.13
@@ -1,5 +1,5 @@
-!standard 07.06    (21)                               00-04-12  AI95-00083/06
-!standard 07.06.01 (20)
+!standard 07.06    (17)                               00-07-13  AI95-00083/07
+!standard 07.06    (21)
 !class binding interpretation 95-07-27
 !status Corrigendum 2000 99-07-28
 !status WG9 approved 95-06-14
@@ -13,8 +13,7 @@
 
 When an (extension) aggregate of a controlled type is assigned other
 than by an assignment or return statement, the aggregate is built "in place".
-No temporary object is create and Adjust is not called on the object as a
-whole.
+No anonymous object is created and Adjust is not called on the target object.
 
 !question
 
@@ -61,10 +60,10 @@
 directly in the target object, thereby eliminating the need for the
 assignment (and the associated calls on Adjust/Finalize):
 
-   21  For an aggregate or function call whose value is assigned into a
-       target object, the implementation need not create a separate
-       anonymous object if it can safely create the value of the
-       aggregate or function call directly in the target object.
+   For an aggregate or function call whose value is assigned into a
+   target object, the implementation need not create a separate
+   anonymous object if it can safely create the value of the
+   aggregate or function call directly in the target object.
 
 However, it seems important to *require* this behavior, so that this
 kind of programming is portable (that is, it will portably work without
@@ -76,8 +75,8 @@
 created.
 
 Note that no Adjust ever takes place on an aggregate as a whole, since
-there is no assignment to the aggregate as a whole (AARM 4.3(5,5b)).
-AARM 7.6(21a) talks about this case, and says that "only one value
+there is no assignment to the aggregate as a whole (4.3(5) and AARM 4.3(5.b)).
+AARM 7.6(21.a) talks about this case, and says that "only one value
 adjustment is necessary".  This is misleading.  It should say that only
 one adjustment of each controlled *subcomponent* (if any) is necessary
 in this case.  *No* adjustments of the object as a whole are necessary
@@ -93,16 +92,18 @@
 The aggregate must be built directly in the newly-created heap object.
 
 Similarly, if we have
+
     function Is_Null (Value : in Dyn_String) return Boolean;
 
 then the aggregate actual parameter in the call
 
+    <<Start_Example>>
     if Is_Null ((Ada.Finalization.Controlled with ...)) then
 
 is built directly in a temporary object, and Adjust is not called on the object
 as a whole.
 
-We except assignment and return statements from this requirement as there is
+We exempt assignment and return statements from this requirement as there is
 no compelling reason to burden implementations with this requirement in those
 cases.
 
@@ -110,12 +111,19 @@
 Controlled and Limited_Controlled are private, so it is not possible to
 create a normal record aggregate for such a type.
 
-!corrigendum 7.06.01(20)
+!corrigendum 7.06(17)
 
 @dinsa
-@xbullet<For a Finalize invoked by a transfer of control due to an abort
-or selection of a terminate alternative, the exception is ignored; any other
-finalizations due to be performed are performed.>
+For an @fa<assignment_statement>, after the @fa<name> and @fa<expression>
+have been evaluated, and any conversion (including constraint checking)
+has been done, an anonymous object is created, and the value is assigned
+into it; that is, the assignment operation is applied. (Assignment includes
+value adjustment.) The target of the @fa<assignment_statement> is then
+finalized. The value of the anonymous object is then assigned into the
+target of the @fa<assignment_statement>. Finally, the anonymous object is
+finalized. As explained below, the implementation may eliminate the
+intermediate anonymous object, so this description subsumes the one given
+in 5.2, @lquote@lquoteAssignment Statements@rquote@rquote.
 @dinst
 @i<@s8<Implementation Requirements>>@hr
 For an aggregate of a controlled type whose value is assigned, other than
@@ -162,7 +170,7 @@
 eliminating the need for the assignment (and the associated calls on
 Adjust/Finalize).   However, it seems important to *require*
 this behavior, so that this kind of programming is portable
-(that is, it will portably work without raising Program_Error due
+(that is, it will work portably without raising Program_Error due
 to an access-before-elaboration from calling Adjust or Finalize
 before their bodies are elaborated).
 

Questions? Ask the ACAA Technical Agent