CVS difference for ai12s/ai12-0080-1.txt

Differences between 1.5 and version 1.6
Log of other versions for file ai12s/ai12-0080-1.txt

--- ai12s/ai12-0080-1.txt	2014/01/05 04:25:25	1.5
+++ ai12s/ai12-0080-1.txt	2014/04/01 04:28:13	1.6
@@ -1,5 +1,8 @@
-!standard 3.9.3(6/2)                                      13-12-11  AI05-0080-1/02
+!standard 3.9.3(6/2)                                      14-03-31  AI05-0080-1/04
+!standard A.18.26(29/3)
+!standard A.18.26(31/3)
 !standard B.1(50)
+!standard N(21.2/3)
 !class presentation 13-10-21
 !status Corrigendum 2014 13-12-11
 !status work item 13-10-21
@@ -21,6 +24,10 @@
 
 2) The examples in B.1 are of interfacing aspects, of course.
 
+3) "An invariant" rather than "A invariant".
+
+4) Drop ".all" from the Edge renaming in the containers example.
+
 !question
 
 1) The following appears to be legal:
@@ -44,6 +51,12 @@
 2) B.1(50) says that the examples are of "interfacing pragmas", but all of the following
 examples are of "interfacing aspects". Should this be fixed? (Yes.)
 
+3) N(21.2/3) start "A invariant". That should be "An invariant", right? (Yes.)
+
+4) The Edge renaming in A.18.32(29/3) and A.18.32(31/3) ends with ".all". But a
+generalized reference is itself a dereference; it's not a pointer that needs to be
+dereferenced. Should the ".all" be deleted? (Yes.)
+
 !recommendation
 
 (See Summary.)
@@ -65,6 +78,22 @@
 
 Example of interfacing {aspects}[pragmas]:
 
+3) Modify N(22.2/4):
+
+Invariant. {An}[A] invariant is an assertion...
+
+4) Modify A.18.32(29/3):
+
+...
+     E : Edge renames G (Next)(C)[.all];
+...
+
+Modify A.18.32(31/3):
+
+...
+     E : Edge renames L(C)[.all];
+...
+
 !discussion
 
 1) This problem was noted in the e-mail appendix to AI95-00391-1 (which
@@ -75,6 +104,11 @@
 2) Since the clause title is "Interfacing aspects", it's pretty clear
 what the intent is!
 
+3) "An" should proceed nouns that start with vowel sounds, as in this case.
+
+4) Since a generalized reference is not (usually) a pointer, it can't (usually)
+be dereferenced. So ".all" doesn't make sense in this example.
+
 !corrigendum 3.9.3(6/2)
 
 @drepl
@@ -96,6 +130,64 @@
 subprogram need not be overridden for the formal type itself; a nonabstract
 version will necessarily be provided by the actual type.>
 
+!corrigendum A.18.32(29/3)
+
+@drepl
+@xcode<@b<for> C @b<in> G (Next).Iterate @b<loop>
+   @b<declare>
+      E : Edge @b<renames> G (Next)(C).@b<all>;
+   @b<begin>
+      @b<if not> Reached(E.To) @b<then>
+         ...
+      @b<end if>;
+   @b<end>;
+@b<end loop>;>
+@dby
+@xcode<@b<for> C @b<in> G (Next).Iterate @b<loop>
+   @b<declare>
+      E : Edge @b<renames> G (Next)(C);
+   @b<begin>
+      @b<if not> Reached(E.To) @b<then>
+         ...
+      @b<end if>;
+   @b<end>;
+@b<end loop>;>
+
+!corrigendum A.18.32(31/3)
+
+@drepl
+@xcode<@b<declare>
+   L : Adjacency_Lists.List @b<renames> G (Next);
+   C : Adjacency_Lists.Cursor := L.First;
+@b<begin>
+   @b<while> Has_Element (C) @b<loop>
+      @b<declare>
+         E : Edge @b<renames> L(C).@b<all>;
+      @b<begin>
+         @b<if not> Reached(E.To) @b<then>
+            ...
+         @b<end if>;
+      @b<end>;
+      C := L.Next (C);
+   @b<end loop>;
+@b<end>;>
+@dby
+@xcode<@b<declare>
+   L : Adjacency_Lists.List @b<renames> G (Next);
+   C : Adjacency_Lists.Cursor := L.First;
+@b<begin>
+   @b<while> Has_Element (C) @b<loop>
+      @b<declare>
+         E : Edge @b<renames> L(C);
+      @b<begin>
+         @b<if not> Reached(E.To) @b<then>
+            ...
+         @b<end if>;
+      @b<end>;
+      C := L.Next (C);
+   @b<end loop>;
+@b<end>;>
+
 !corrigendum B.1(50)
 
 @drepl
@@ -103,6 +195,15 @@
 @dby
 @i<Example of interfacing aspects:>
 
+!corrigendum N(21.2/3)
+
+@drepl
+Invariant. A invariant is an assertion that is expected to be True for all
+objects of a given private type when viewed from outside the defining package.
+@dby
+Invariant. An invariant is an assertion that is expected to be True for all
+objects of a given private type when viewed from outside the defining package.
+
 !ASIS
 
 No changes needed.
@@ -173,5 +274,29 @@
 
 B.1(50) says "examples of interfacing PRAGMAS", but the examples are all of
 aspects. Grump.
+
+****************************************************************
+
+From: John Barnes
+Sent: Saturday, January 18, 2014  10:26 AM
+
+How is the cold out there?  It's just so wet here.
+
+Anyway, you don't want to know this but the Ada 2012 Glossary has
+"A invariant ..." which should be "An invariant ...".
+
+****************************************************************
+
+Summary of private conversation, March 29-31:
+
+Ed Schonberg: Reference returns a type to which an implicit
+dereference can be applied, but it certainly cannot be dereferenced
+explicitly.
+
+Randy Brukardt: Arghh! For some reason, I thought a generalized reference
+returned an access value, not an object. 4.1.5(6/3) clearly says that it
+is an object (obtained via a dereference). At least the example A.18.32
+(paragraphs 29 and 31) are wrong this way, as are a lot of my other examples
+in e-mail and those I created for John in the Rationale.
 
 ****************************************************************

Questions? Ask the ACAA Technical Agent