CascadeNode.st
changeset 0 7ad01559b262
child 3 b63b8a6b71fb
--- /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
+! !