Author: larry
Date: Fri Aug 18 09:00:28 2006
New Revision: 11136

Modified:
   doc/trunk/design/syn/S04.pod
   doc/trunk/design/syn/S06.pod
   doc/trunk/design/syn/S12.pod

Log:
No such thing as a "first invocant" anymore.
Clarified NEXT semantics.


Modified: doc/trunk/design/syn/S04.pod
==============================================================================
--- doc/trunk/design/syn/S04.pod        (original)
+++ doc/trunk/design/syn/S04.pod        Fri Aug 18 09:00:28 2006
@@ -12,9 +12,9 @@
 
   Maintainer: Larry Wall <[EMAIL PROTECTED]>
   Date: 19 Aug 2004
-  Last Modified: 17 Aug 2006
+  Last Modified: 18 Aug 2006
   Number: 4
-  Version: 36
+  Version: 37
 
 This document summarizes Apocalypse 4, which covers the block and
 statement syntax of Perl.
@@ -636,7 +636,7 @@
        UNDO {...}      at every unsuccessful block exit, part of LEAVE queue
 
       FIRST {...}*     at loop initialization time, before any ENTER
-       NEXT {...}      at loop continuation time, after any LEAVE
+       NEXT {...}      at loop continuation time, before any LEAVE
        LAST {...}      at loop termination time, after any LEAVE
 
         PRE {...}      assert precondition at every block entry, before any
@@ -707,8 +707,14 @@
 of C<LEAVE>, and for execution order are treated as part of the queue of
 C<LEAVE> blocks.
 
-C<FIRST>, C<NEXT>, and C<LAST> are meaningful only within the lexical scope
-of a loop, and may occur only at the top level of such a loop block.
+C<FIRST>, C<NEXT>, and C<LAST> are meaningful only within the
+lexical scope of a loop, and may occur only at the top level of such
+a loop block.  A C<NEXT> executes only if the end of the loop block is
+reached normally, or an explicit C<next> is executed.  In distinction
+to C<LEAVE> blocks, a C<NEXT> block is not executed if the loop block
+is exited via any exception other than the control exception thrown
+by C<next>.  In particular, a C<last> bypasses evaluation of C<NEXT>
+blocks.
 
 [Note: the name C<FIRST> used to be associated with C<state>
 declarations.  Now it is associated only with loops.  See the C<START>

Modified: doc/trunk/design/syn/S06.pod
==============================================================================
--- doc/trunk/design/syn/S06.pod        (original)
+++ doc/trunk/design/syn/S06.pod        Fri Aug 18 09:00:28 2006
@@ -499,7 +499,7 @@
     $obj.set_name("Sam");   # same as the above
 
 An invocant is the topic of the corresponding method if that formal
-parameter is declared with the name C<$_>.  A method's first invocant
+parameter is declared with the name C<$_>.  A method's invocant
 always has the alias C<self>.  Other styles of self can be declared
 with the C<self> pragma.
 

Modified: doc/trunk/design/syn/S12.pod
==============================================================================
--- doc/trunk/design/syn/S12.pod        (original)
+++ doc/trunk/design/syn/S12.pod        Fri Aug 18 09:00:28 2006
@@ -12,9 +12,9 @@
 
   Maintainer: Larry Wall <[EMAIL PROTECTED]>
   Date: 27 Oct 2004
-  Last Modified: 17 Aug 2006
+  Last Modified: 18 Aug 2006
   Number: 12
-  Version: 20
+  Version: 21
 
 =head1 Overview
 
@@ -730,7 +730,7 @@
 =head1 Multi dispatch
 
 Multi submethods work just like multi subs except they are constrained
-to an exact type match on the first invocant.
+to an exact type match on the invocant.
 
 Perl 6.0.0 is not required to support multiple dispatch on named parameters,
 only on positional parameters.  Note that most builtins will map known
@@ -742,7 +742,7 @@
 
 Attributes are tied to a particular class definition, so a multi method
 can only directly access the attributes of a class it's defined within
-when the first invocant is the "self" of that attribute.
+when the invocant is the "self" of that attribute.
 However, it may call the private attribute accessors from a different
 class if that other class has indicated that it trusts the class the
 multi method is defined in:

Reply via email to