CVS difference for ai05s/ai05-0005-1.txt

Differences between 1.18 and version 1.19
Log of other versions for file ai05s/ai05-0005-1.txt

--- ai05s/ai05-0005-1.txt	2008/08/08 05:21:31	1.18
+++ ai05s/ai05-0005-1.txt	2008/10/25 04:53:13	1.19
@@ -1556,7 +1556,125 @@
 
 ****************************************************************
 
-Editor's note (July 11, 2008): All of the items above this
+!topic Ungrammatical sentence in AARM
+!reference Ada 2005 AARM 13.7.2(5.a/2)
+!from Christoph Grein 2008-06-17
+!discussion
+The following sentence in parentheses, a quote from the paragraph cited above,
+does not make sense. Perhaps with the changes indicated, this is what is meant.
+
+(If Object is not a [not] by-reference type, the object ought to be aliased;
+recall that the Address attribute is not required to provide a useful result
+{for} other objects.)
+
+****************************************************************
+
+!topic 12.4 presentation nitpick
+!reference RM05 12.4(2/2)
+!from Adam Beneschan 08-09-11
+!discussion
+
+In 12.4(2/2), there should be a vertical bar somewhere separating the two different
+syntaxes for the generic formal object definition, but it seems to be missing.
+(It was present in the AI-423 text.)  It is missing on both web pages:
+
+    http://www.adaic.org/standards/05rm/html/RM-12-4.html
+    http://www.adaic.org/standards/05aarm/html/AA-12-4.html
+
+****************************************************************
+
+From: Randy Brukardt
+Sent: Thursday, September 25, 2008  12:55 PM
+
+It's correct in the actual Amendment document, so this is just a bug in the
+unofficial consolidated versions. As such, this isn't a change that needs to go
+through the ARG. Moreover, it was already noted here (Ada-Comment) in December
+(not that you or anyone else could be expected to remember that).
+
+****************************************************************
+
+!topic Definition of "assignment operation"
+!reference 7.6(13-15), 7.6(21), 9.8(11)
+!from Adam Beneschan 08-09-24
+!discussion
+
+When an assignment statement has a target that is a variable V of a controlled
+type, V is finalized, then the new value is copied into V, then V is adjusted.
+However, according to 7.6(13-15), only the last two steps of this process are
+considered an "assignment operation".
+
+When possibly overlapping slices are copied, the implementation permission in 7.6(21)
+allows this to take place one component at a time.  This would mean, that for a
+case like
+
+   A (N1 .. N2) := A (N3 .. N4);
+
+where A's element type is controlled or has controlled subcomponents, then the
+operations could be implemented as
+
+   Finalize A(N1), copy into A(N1), adjust A(N1)
+   Finalize A(N1+1), copy into A(N1+1), adjust A(N1+1), etc.
+
+or
+
+   Finalize A(N2), copy into A(N2), adjust A(N2)
+   Finalize A(N2-1), copy into A(N2-1), adjust A(N2-1), etc.
+
+where the order (forward or reverse) would be determined at runtime. 
+
+How many "assignment operations" does this involve?
+
+If the Implementation Permission were not used, I think there would be just
+two assignment operations:
+
+     *** START OF ASSIGNMENT OPERATION 1 ***
+   Copy into anonymous object
+   Adjust anonymous object
+     *** END OF ASSIGNMENT OPERATION 1 ***
+   Finalize A(N1..N2)
+     *** START OF ASSIGNMENT OPERATION 2 ***
+   Copy A(N1..N2) from anonymous object
+   Adjust A(N1..N2)
+     *** END OF ASSIGNMENT OPERATION 2 ***
+   Finalize anonymous object
+
+But when an anonymous object isn't used, it's not clear to me how many
+assignment operations there are.  Is the whole loop just one big assignment
+operation, or is there one assignment operation for each component? 
+
+The reason this matters (somewhat) is because of 9.8(11).  The question, of course,
+is: if the Implementation Permission of 7.6(21) is used in an overlapping
+slice case, at what points in the loop is an abort allowed to take place?
+I'm not sure the RM answers this question.  
+
+****************************************************************
+
+From: Tucker Taft
+Sent: Wednesday, September 24, 2008  7:33 PM
+
+If you take advantage of 7.6(20), then each subcomponent assignment can be
+separate, and the abort deferral only applies to the copy-and-adjust
+combination for that particular subcomponent.
+
+You would allow aborts between individual components.  The only reason to
+defer abort is that you don't want the copy step separated from the adjust
+step.
+
+I believe the RM is relatively clear in 7.6(20) when it says:
+
+   ... the implementation may finalize and assign each
+   component of the variable separately ...
+
+I agree the wording in 7.6(21) which refers to 7.6(20) muddies the waters
+a bit.
+
+In any case, it wouldn't hurt to have an AARM note to emphasize that
+abort deferral needs to last only across an individual component assignment,
+and aborts can be handled between component assignments.
+
+****************************************************************
+
+Editor's note (Oct 20, 2008): All of the items above this
 marker have been included in the working version of the AARM.
 
 ****************************************************************

Questions? Ask the ACAA Technical Agent