--- a/MessageNode.st Fri Mar 28 15:39:23 2003 +0100
+++ b/MessageNode.st Fri Mar 28 15:41:56 2003 +0100
@@ -318,6 +318,10 @@
^ selector
!
+selector:s
+ selector := s asSymbolIfInterned ? s.
+!
+
selectorPosition
"return the value of the instance variable 'selectorPosition' (automatically generated)"
@@ -437,8 +441,6 @@
plausibilityCheck
|rec arg1 arg2 arg1Value operand|
- selector := selector asSymbol.
-
(argArray size > 0) ifTrue:[
arg1 := argArray at:1
].
@@ -780,7 +782,6 @@
realReceiver := self realReceiver.
isSuper := realReceiver isSuper.
- selector := selector asSymbol.
argArray isNil ifTrue:[
nargs := 0
@@ -1328,7 +1329,6 @@
realReceiver := self realReceiver.
isSuper := realReceiver isSuper.
- selector := selector asSymbol.
argArray isNil ifTrue:[
nargs := 0
@@ -1974,7 +1974,6 @@
|nargs isBuiltIn code codeL litIndex cls clsLitIndex isSuper realReceiver noSendDrop|
noSendDrop := aCompiler class newCodeSet == true.
- selector := selector asSymbol.
realReceiver := self realReceiver.
isSuper := realReceiver isSuper.
@@ -2853,11 +2852,65 @@
!MessageNode methodsFor:'evaluation'!
-evaluate
+evaluateForCascadeIn:anEnvironment
+ |r a1 a2 a3 nargs argValueArray class|
+
+ receiver isSuper ifTrue:[
+ r := receiver value.
+ class := receiver definingClass.
+ receiver isHere ifFalse:[
+ class := class superclass.
+ ].
+ argArray notNil ifTrue:[
+ argValueArray := argArray collect:[:arg | arg evaluateIn:anEnvironment].
+ ] ifFalse:[
+ argValueArray := #()
+ ].
+ r perform:selector inClass:class withArguments:argValueArray.
+ ^ r
+ ].
+
+ r := receiver evaluateIn:anEnvironment.
+ argArray isNil ifTrue:[
+ r perform:selector.
+ ^ r
+ ].
+ nargs := argArray size.
+ a1 := (argArray at:1) evaluateIn:anEnvironment.
+ (nargs == 1) ifTrue:[
+ r perform:selector with:a1.
+ ^ r
+ ].
+ a2 := (argArray at:2) evaluateIn:anEnvironment.
+ (nargs == 2) ifTrue:[
+ r perform:selector with:a1
+ with:a2.
+ ^ r
+ ].
+ a3 := (argArray at:3) evaluateIn:anEnvironment.
+ (nargs == 3) ifTrue:[
+ r perform:selector with:a1
+ with:a2
+ with:a3.
+ ^ r
+ ].
+ argValueArray := Array new:nargs.
+ argValueArray at:1 put:a1.
+ argValueArray at:2 put:a2.
+ argValueArray at:3 put:a3.
+ 3 to:nargs do:[:idx |
+ |argVal|
+
+ argVal := (argArray at:3) evaluateIn:anEnvironment.
+ argValueArray at:idx put:argVal.
+ ].
+ r perform:selector withArguments:argValueArray.
+ ^ r
+!
+
+evaluateIn:anEnvironment
|r nargs argValueArray class|
- selector := selector asSymbol.
-
receiver isSuper ifTrue:[
r := receiver value.
receiver isHere ifTrue:[
@@ -2866,84 +2919,38 @@
class := receiver definingClass superclass.
].
argArray notNil ifTrue:[
- argValueArray := argArray collect:[:arg | arg evaluate].
+ argValueArray := argArray collect:[:arg | arg evaluateIn:anEnvironment].
] ifFalse:[
argValueArray := #()
].
^ r perform:selector inClass:class withArguments:argValueArray
].
-
+ r := receiver evaluateIn:anEnvironment.
argArray isNil ifTrue:[
- ^ (receiver evaluate) perform:selector
+ ^ r perform:selector
].
nargs := argArray size.
(nargs == 0) ifTrue:[
- ^ (receiver evaluate) perform:selector
+ ^ r perform:selector
].
(nargs == 1) ifTrue:[
- ^ (receiver evaluate) perform:selector with:(argArray at:1) evaluate
+ ^ r perform:selector
+ with:((argArray at:1) evaluateIn:anEnvironment)
].
(nargs == 2) ifTrue:[
- ^ (receiver evaluate) perform:selector
- with:(argArray at:1) evaluate
- with:(argArray at:2) evaluate
+ ^ r perform:selector
+ with:((argArray at:1) evaluateIn:anEnvironment)
+ with:((argArray at:2) evaluateIn:anEnvironment)
].
(nargs == 3) ifTrue:[
- ^ (receiver evaluate) perform:selector
- with:(argArray at:1) evaluate
- with:(argArray at:2) evaluate
- with:(argArray at:3) evaluate
+ ^ r perform:selector
+ with:((argArray at:1) evaluateIn:anEnvironment)
+ with:((argArray at:2) evaluateIn:anEnvironment)
+ with:((argArray at:3) evaluateIn:anEnvironment)
].
- r := receiver evaluate.
- argValueArray := argArray collect:[:arg | arg evaluate].
+ argValueArray := argArray collect:[:arg | arg evaluateIn:anEnvironment].
^ r perform:selector withArguments:argValueArray
-!
-
-evaluateForCascade
- |r nargs argValueArray class|
-
- selector := selector asSymbol.
-
- receiver isSuper ifTrue:[
- r := receiver value.
- class := receiver definingClass.
- receiver isHere ifFalse:[
- class := class superclass.
- ].
- argArray notNil ifTrue:[
- argValueArray := argArray collect:[:arg | arg evaluate].
- ] ifFalse:[
- argValueArray := #()
- ].
- r perform:selector inClass:class withArguments:argValueArray.
- ^ r
- ].
-
- r := receiver evaluate.
- argArray isNil ifTrue:[
- r perform:selector.
- ^ r
- ].
- nargs := argArray size.
- (nargs == 1) ifTrue:[
- r perform:selector with:(argArray at:1) evaluate.
- ^ r
- ].
- (nargs == 2) ifTrue:[
- r perform:selector with:(argArray at:1) evaluate
- with:(argArray at:2) evaluate.
- ^ r
- ].
- (nargs == 3) ifTrue:[
- r perform:selector with:(argArray at:1) evaluate
- with:(argArray at:2) evaluate
- with:(argArray at:3) evaluate.
- ^ r
- ].
- argValueArray := argArray collect:[:arg | arg evaluate].
- r perform:selector withArguments:argValueArray.
- ^ r
! !
!MessageNode methodsFor:'printing & storing'!
@@ -3059,6 +3066,10 @@
^ true
!
+numArgs
+ ^ argArray size
+!
+
realReceiver
receiver isCascade ifTrue:[
^ receiver realReceiver
@@ -3075,5 +3086,5 @@
!MessageNode class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libcomp/MessageNode.st,v 1.126 2003-03-27 22:31:40 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libcomp/MessageNode.st,v 1.127 2003-03-28 14:40:25 cg Exp $'
! !