20 CascadeNode comment:' |
20 CascadeNode comment:' |
21 |
21 |
22 COPYRIGHT (c) 1989 by Claus Gittinger |
22 COPYRIGHT (c) 1989 by Claus Gittinger |
23 All Rights Reserved |
23 All Rights Reserved |
24 |
24 |
25 $Header: /cvs/stx/stx/libcomp/CascadeNode.st,v 1.4 1994-01-16 03:51:33 claus Exp $ |
25 $Header: /cvs/stx/stx/libcomp/CascadeNode.st,v 1.5 1994-02-25 12:51:15 claus Exp $ |
26 '! |
26 '! |
27 |
27 |
28 !CascadeNode methodsFor: 'code generation'! |
28 !CascadeNode methodsFor: 'code generation'! |
29 |
29 |
30 codeOn:aStream inBlock:b valueNeeded:valueNeeded |
30 codeOn:aStream inBlock:b valueNeeded:valueNeeded |
34 |
34 |
35 codeForCascadeOn:aStream inBlock:b |
35 codeForCascadeOn:aStream inBlock:b |
36 receiver codeForCascadeOn:aStream inBlock:b. |
36 receiver codeForCascadeOn:aStream inBlock:b. |
37 aStream nextPut:#dup. |
37 aStream nextPut:#dup. |
38 self codeSendOn:aStream inBlock:b valueNeeded:false |
38 self codeSendOn:aStream inBlock:b valueNeeded:false |
|
39 ! ! |
|
40 |
|
41 !CascadeNode methodsFor: 'printing'! |
|
42 |
|
43 printOn:aStream indent:i |
|
44 |needParen selectorParts index index2 arg nargs| |
|
45 |
|
46 index := 1. |
|
47 selectorParts := OrderedCollection new. |
|
48 [index == 0] whileFalse:[ |
|
49 index2 := selector indexOf:$: startingAt:index. |
|
50 index2 ~~ 0 ifTrue:[ |
|
51 selectorParts add:(selector copyFrom:index to:index2). |
|
52 index2 := index2 + 1 |
|
53 ]. |
|
54 index := index2 |
|
55 ]. |
|
56 |
|
57 receiver printOn:aStream indent:i. |
|
58 aStream nextPutAll:'; '. |
|
59 |
|
60 nargs := argArray size. |
|
61 nargs == 0 ifTrue:[ |
|
62 selector printOn:aStream |
|
63 ] ifFalse:[ |
|
64 1 to:nargs do:[:argIndex | |
|
65 aStream space. |
|
66 (selectorParts at:argIndex) printOn:aStream. |
|
67 aStream space. |
|
68 arg := argArray at:argIndex. |
|
69 needParen := false. |
|
70 arg isMessage ifTrue:[ |
|
71 arg isBinaryMessage ifFalse:[ |
|
72 arg isUnaryMessage ifFalse:[ |
|
73 needParen := true |
|
74 ] |
|
75 ]. |
|
76 ]. |
|
77 needParen ifTrue:[ |
|
78 aStream nextPutAll:'(' |
|
79 ]. |
|
80 arg printOn:aStream indent:i. |
|
81 needParen ifTrue:[ |
|
82 aStream nextPutAll:') ' |
|
83 ]. |
|
84 ] |
|
85 ] |
39 ! ! |
86 ! ! |
40 |
87 |
41 !CascadeNode methodsFor: 'evaluating'! |
88 !CascadeNode methodsFor: 'evaluating'! |
42 |
89 |
43 evaluate |
90 evaluate |