CascadeNode.st
changeset 15 992c3d87edbf
parent 13 30e69e21d1d1
child 20 f8dd8ba75205
equal deleted inserted replaced
14:f08ffd9958a5 15:992c3d87edbf
    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