--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/CascadeNode.st Fri Jul 16 11:38:57 1993 +0200
@@ -0,0 +1,76 @@
+"
+ COPYRIGHT (c) 1989-93 by Claus Gittinger
+ All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice. This software may not
+ be provided or otherwise made available to, or used by, any
+ other person. No title to or ownership of the software is
+ hereby transferred.
+"
+
+MessageNode subclass:#CascadeNode
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:''
+ category:'System-Compiler-Support'
+!
+
+CascadeNode comment:'
+
+COPYRIGHT (c) 1989-93 by Claus Gittinger
+ All Rights Reserved
+
+%W% %E%
+'!
+
+!CascadeNode methodsFor: 'code generation'!
+
+codeOn:aStream inBlock:b valueNeeded:valueNeeded
+ receiver codeForCascadeOn:aStream inBlock:b.
+ self codeSendOn:aStream inBlock:b valueNeeded:valueNeeded
+!
+
+codeForCascadeOn:aStream inBlock:b
+ receiver codeForCascadeOn:aStream inBlock:b.
+ aStream nextPut:#dup.
+ self codeSendOn:aStream inBlock:b valueNeeded:false
+! !
+
+!CascadeNode methodsFor: 'evaluating'!
+
+evaluate
+ |t argValueArray index|
+
+ t := receiver evaluateForCascade.
+ argArray isNil ifTrue:[
+ t perform:selector.
+ ^ t
+ ].
+ argValueArray := Array new:(argArray size).
+ index := 1.
+ argArray do:[:arg |
+ argValueArray at:index put:(arg evaluate).
+ index := index + 1
+ ].
+ ^ t perform:selector withArguments:argValueArray
+!
+
+evaluateForCascade
+ |t argValueArray index|
+
+ t := receiver evaluateForCascade.
+ argArray isNil ifTrue:[
+ t perform:selector.
+ ^ t
+ ].
+ argValueArray := Array new:(argArray size).
+ index := 1.
+ argArray do:[:arg |
+ argValueArray at:index put:(arg evaluate).
+ index := index + 1
+ ].
+ t perform:selector withArguments:argValueArray.
+ ^ t
+! !