--- a/Parser.st Tue Jun 10 12:21:56 2014 +0200
+++ b/Parser.st Tue Jun 10 12:43:25 2014 +0200
@@ -6407,7 +6407,9 @@
"parse an array index expression; this is a squeak/stx extension.
foo[x] is syntactic sugar for 'foo at:x'
and foo[x] := expr is syntactic sugar for 'foo at:x put:expr';
- with commas, foo[x , y] generates foo at:x at:y"
+ with commas, foo[x , y] generates foo at:x at:y.
+ This syntax extension must be enabled in the parserFlags as
+ allowArrayIndexSyntaxExtension (disabled by default)"
|receiver argList selectorStream valNode|
@@ -6421,40 +6423,40 @@
argList := OrderedCollection new.
[
- [
- |indexNode|
-
- self nextToken.
- indexNode := self expression.
- argList isEmpty ifTrue:[selectorStream nextPutAll:'_'].
- selectorStream nextPutAll:'at:'.
- argList add: indexNode.
- (tokenType == #BinaryOperator ) and:[ token = ',']
- ] whileTrue.
-
- tokenType == $] ifFalse:[
- self parseError:''']'' expected'.
- ^ #Error
- ].
- self nextToken.
-
- tokenType == $[ ifTrue:[
- receiver := MessageNode
- receiver:receiver
- selector:(selectorStream contents)
- args:argList.
- selectorStream := WriteStream on: (String new: 32).
- ].
- tokenType == $[
+ [
+ |indexNode|
+
+ self nextToken.
+ indexNode := self expression.
+ argList isEmpty ifTrue:[selectorStream nextPutAll:'_'].
+ selectorStream nextPutAll:'at:'.
+ argList add: indexNode.
+ (tokenType == #BinaryOperator ) and:[ token = ',']
+ ] whileTrue.
+
+ tokenType == $] ifFalse:[
+ self parseError:''']'' expected'.
+ ^ #Error
+ ].
+ self nextToken.
+
+ tokenType == $[ ifTrue:[
+ receiver := MessageNode
+ receiver:receiver
+ selector:(selectorStream contents)
+ args:argList.
+ selectorStream := WriteStream on: (String new: 32).
+ ].
+ tokenType == $[
] whileTrue.
tokenType == #':=' ifTrue:[
- self nextToken.
- selectorStream nextPutAll:'put:'.
- valNode := self expression.
- valNode == #Error ifTrue:[
- ^ valNode
- ].
+ self nextToken.
+ selectorStream nextPutAll:'put:'.
+ valNode := self expression.
+ valNode == #Error ifTrue:[
+ ^ valNode
+ ].
"/ this was found in squeak - why make it a block ?
"/ (valNode isKindOf: BlockNode) ifFalse:[
"/ valNode _ BlockNode new
@@ -6463,13 +6465,13 @@
"/ returns: false
"/ from: encoder.
"/ ].
- argList add: valNode
+ argList add: valNode
].
^ MessageNode
- receiver:receiver
- selector:selectorStream contents
- args:argList.
+ receiver:receiver
+ selector:selectorStream contents
+ args:argList.
"
AllowArrayIndexSyntaxExtension := true.
@@ -6857,9 +6859,11 @@
functionCallExpression
"parse a functionCall;
this is an st/x extension.
- foo(x)
+ foo(x)
is syntactic sugar for
- foo value:x
+ foo value:x
+ This syntax extension must be enabled in the parserFlags as
+ allowFunctionCallSyntaxForBlockEvaluation (disabled by default)
"
|receiver numArgs argList evalSelectors evalSelector|
@@ -6871,11 +6875,11 @@
(receiver == #Error) ifTrue:[^ #Error].
receiver isVariable ifFalse:[
- ((receiver isMessage or:[receiver isAssignment]) and:[receiver parenthesized]) ifFalse:[
- receiver isBlock ifFalse:[
- ^ receiver
- ]
- ].
+ ((receiver isMessage or:[receiver isAssignment]) and:[receiver parenthesized]) ifFalse:[
+ receiver isBlock ifFalse:[
+ ^ receiver
+ ]
+ ].
].
argList := self functionCallArgList.
@@ -6883,34 +6887,34 @@
"/ make it a block evaluation
numArgs := argList size.
numArgs == 0 ifTrue:[
- ^ UnaryNode receiver:receiver selector:#value
+ ^ UnaryNode receiver:receiver selector:#value
].
evalSelectors := #(#'value:'
- #'value:value:'
- #'value:value:value:'
- #'value:value:value:value:'
- #'value:value:value:value:value:'
- #'value:value:value:value:value:value:'
- #'value:value:value:value:value:value:value:'
- #'value:value:value:value:value:value:value:value:'
- ).
+ #'value:value:'
+ #'value:value:value:'
+ #'value:value:value:value:'
+ #'value:value:value:value:value:'
+ #'value:value:value:value:value:value:'
+ #'value:value:value:value:value:value:value:'
+ #'value:value:value:value:value:value:value:value:'
+ ).
numArgs <= evalSelectors size ifTrue:[
- evalSelector := evalSelectors at:numArgs.
- ^ (MessageNode
- receiver:receiver
- selector:evalSelector
- args:argList)
- startPosition: receiver startPosition
- endPosition: tokenLastEndPosition.
+ evalSelector := evalSelectors at:numArgs.
+ ^ (MessageNode
+ receiver:receiver
+ selector:evalSelector
+ args:argList)
+ startPosition: receiver startPosition
+ endPosition: tokenLastEndPosition.
].
"/ gen argument vector
^ (MessageNode
- receiver:receiver
- selector:#valueWithArguments:
- args:(self genMakeArrayWith:argList))
- startPosition: receiver startPosition
- endPosition: tokenLastEndPosition.
+ receiver:receiver
+ selector:#valueWithArguments:
+ args:(self genMakeArrayWith:argList))
+ startPosition: receiver startPosition
+ endPosition: tokenLastEndPosition.
"
Parser allowFunctionCallSyntaxForBlockEvaluation:true.
"
@@ -11898,11 +11902,11 @@
!Parser class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libcomp/Parser.st,v 1.830 2014-06-06 14:03:56 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libcomp/Parser.st,v 1.831 2014-06-10 10:43:25 cg Exp $'
!
version_CVS
- ^ '$Header: /cvs/stx/stx/libcomp/Parser.st,v 1.830 2014-06-06 14:03:56 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libcomp/Parser.st,v 1.831 2014-06-10 10:43:25 cg Exp $'
!
version_SVN