Author: larry
Date: Mon Apr 24 11:19:24 2006
New Revision: 8933

Modified:
   doc/trunk/design/syn/S02.pod

Log:
Clarification requested by spinclad++.


Modified: doc/trunk/design/syn/S02.pod
==============================================================================
--- doc/trunk/design/syn/S02.pod        (original)
+++ doc/trunk/design/syn/S02.pod        Mon Apr 24 11:19:24 2006
@@ -14,7 +14,7 @@
   Date: 10 Aug 2004
   Last Modified: 24 Apr 2006
   Number: 2
-  Version: 30
+  Version: 31
 
 This document summarizes Apocalypse 2, which covers small-scale
 lexical items and typological issues.  (These Synopses also contain
@@ -371,7 +371,7 @@
 system of type declarations.  C<Int> automatically supports promotion
 to arbitrary precision, as well as holding C<Inf> and C<NaN> values.
 
-(C<Num> may support arbitrary-precision floating-point arithmatic, but
+(C<Num> may support arbitrary-precision floating-point arithmetic, but
 is not required to unless we can do so portably and efficiently.)
 
 C<Rational> supports arbitrary precision rational arithmetic.  However,
@@ -1215,7 +1215,7 @@
 turns into C<('a')> rather than C<('a',)>.
 
 Two or more adverbs can always be strung together without intervening
-punctuation anywhere a single adverb is acceptible.  When used as named
+punctuation anywhere a single adverb is acceptable.  When used as named
 arguments, you may put comma between.  See S06.
 
 The negated form (C<:!a>) and the sigiled forms (C<:$a>, C<:@a>,
@@ -1532,7 +1532,7 @@
 (and other type names) are predeclared, or prefixed with the C<::>
 type sigil when you're declaring a new one.)  A consequence of this
 is that there's no longer any "C<use strict 'subs'>".  Since the syntax
-for method calls is distinguished from sub calls, it is only unreconized
+for method calls is distinguished from sub calls, it is only unrecognized
 sub calls that must be treated specially.
 
 You still must declare your subroutines, but an unrecognized bare
@@ -1588,14 +1588,25 @@
     foo bar 1          # foo(bar(1))   -- both subject to postdeclaration
                                        -- never taken as indirect object
     foo $bar: 1                # $bar.foo(1)   -- indirect object even if 
declared sub
-    foo bar():         # bar().foo(1)  -- even if foo declared sub
-    foo bar baz: 1     # foo(bar baz: 1) -- colon controls "bar", not foo.
+                                       -- $bar considered one token
+    foo (bar()):       # bar().foo(1)  -- even if foo declared sub
+    foo bar():         # illegal       -- bar() is two tokens.
+    foo .bar:          # foo(.bar:)    -- colon chooses .bar to listopify
+    foo bar baz: 1     # foo(baz.bar(1)) -- colon controls "bar", not foo.
     foo (bar baz): 1   # bar(baz()).foo(1) -- colon controls "foo"
     $foo $bar          # illegal       -- two terms in a row
     $foo $bar:         # illegal       -- use $bar.$foo for indirection
     (foo bar) baz: 1   # illegal       -- use $baz.$(foo bar) for indirection
 
-Parens are required around any indirect object that would be ambiguous.
+The indirect object colon only ever dominates a simple term, where
+"simple" includes classes and variables and parenthesized expressions,
+but explicitly not method calls, because the colon will bind to a
+trailing method call in preference.  An indirect object that parses
+as more than one token must be placed in parentheses, followed by
+the colon.  In short, only an identifier followed by a simple term
+followed by a postfix colon is C<ever> parsed as an indirect object,
+but that form will C<always> be parsed as an indirect object regardless
+of whether the identifier is otherwise declared.
 
 =item *
 

Reply via email to