Parser.st
changeset 4180 4f11279cfed2
parent 4178 ee9ffcf76d0e
child 4186 1a3f5a9938fa
--- a/Parser.st	Tue Aug 08 16:57:26 2017 +0200
+++ b/Parser.st	Tue Aug 08 17:41:14 2017 +0200
@@ -6649,9 +6649,12 @@
 
     |receiver argList selectorStream valNode|
 
-    receiver := self functionCallExpression.
+    parserFlags allowFunctionCallSyntaxForBlockEvaluation ifTrue:[
+        receiver := self functionCallExpression.
+    ] ifFalse:[
+        receiver := self primary.
+    ].
     tokenType == $[ ifFalse:[^ receiver].
-
     parserFlags allowArrayIndexSyntaxExtension == true ifFalse:[^ receiver.].
     (receiver == #Error) ifTrue:[^ #Error].
 
@@ -6728,6 +6731,8 @@
      foo[2].
      foo[1].
     "
+
+    "Modified: / 08-08-2017 / 16:56:33 / cg"
 !
 
 binaryExpression
@@ -6963,6 +6968,7 @@
         [tokenType == $;] whileTrue:[
             lastSemiPosition := tokenPosition.
             self nextToken.
+            
             (tokenType == #Identifier) ifTrue:[
                 tokenStart := tokenPosition.
                 tokenEnd := tokenPosition + tokenName size - 1.
@@ -6970,8 +6976,7 @@
                 sel := tokenName.
                 sel := self selectorCheck:tokenName for:realReceiver position:tokenPosition to:tokenEnd.
                 receiver := CascadeNode receiver:receiver selector:sel.
-                receiver startPosition: tokenStart
-                           endPosition: tokenEnd.
+                receiver startPosition: tokenStart endPosition: tokenEnd.
                 receiver selectorPartPositions: (Array with: (tokenStart to: tokenEnd)).
                 receiver lineNumber:tokenLineNr.
                 receiver := self messageNodeRewriteHookFor:receiver.
@@ -7022,8 +7027,11 @@
                             args := args copyWith:arg.
                             pos2 := tokenEnd
                         ].
-                        positions do:[:p |
-                            self markSelector:sel from:p start to:p stop receiverNode:realReceiver.
+                        
+                        self isSyntaxHighlighter ifTrue:[
+                            positions do:[:p |
+                                self markSelector:sel from:p start to:p stop receiverNode:realReceiver.
+                            ].
                         ].
 
                         sel := self selectorCheck:sel for:realReceiver position:pos to:pos2.
@@ -7081,8 +7089,8 @@
     ].
     ^ receiver
 
-    "Modified: / 19-01-2000 / 16:22:16 / cg"
     "Modified: / 01-10-2013 / 20:54:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 08-08-2017 / 17:06:12 / cg"
 !
 
 functionCallArgList
@@ -8716,12 +8724,22 @@
 
     |receiver|
 
-    receiver := self arrayIndexingExpression.
+    (parserFlags allowArrayIndexSyntaxExtension 
+    or:[ parserFlags allowFunctionCallSyntaxForBlockEvaluation ]) ifFalse:[
+        receiver := self primary
+    ] ifTrue:[    
+        receiver := self arrayIndexingExpression.
+    ].
     (receiver == #Error) ifTrue:[^ #Error].
-    (tokenType == #EOF) ifTrue:[^ receiver].
-    tokenType == $] ifTrue:[^ receiver].
-    tokenType == $) ifTrue:[^ receiver].
+"/    (tokenType == #EOF) ifTrue:[^ receiver].
+"/    tokenType == $] ifTrue:[^ receiver].
+"/    tokenType == $) ifTrue:[^ receiver].
+    (self isValidUnarySelector:tokenType) ifFalse:[
+        ^ receiver
+    ].    
     ^ self unaryExpressionFor:receiver
+
+    "Modified: / 08-08-2017 / 17:02:26 / cg"
 !
 
 unaryExpressionFor:receiverArg