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: