BinaryNode.st
author claus
Sun, 16 Jan 1994 04:51:45 +0100
changeset 13 30e69e21d1d1
parent 6 0cd4e7480440
child 20 f8dd8ba75205
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
     1
"
4
f6fd83437415 *** empty log message ***
claus
parents: 3
diff changeset
     2
 COPYRIGHT (c) 1989 by Claus Gittinger
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
     3
              All Rights Reserved
7ad01559b262 Initial revision
claus
parents:
diff changeset
     4
7ad01559b262 Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
7ad01559b262 Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
7ad01559b262 Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
7ad01559b262 Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
7ad01559b262 Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
7ad01559b262 Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
7ad01559b262 Initial revision
claus
parents:
diff changeset
    11
"
7ad01559b262 Initial revision
claus
parents:
diff changeset
    12
7ad01559b262 Initial revision
claus
parents:
diff changeset
    13
MessageNode subclass:#BinaryNode
7ad01559b262 Initial revision
claus
parents:
diff changeset
    14
       instanceVariableNames:''
7ad01559b262 Initial revision
claus
parents:
diff changeset
    15
       classVariableNames:''
7ad01559b262 Initial revision
claus
parents:
diff changeset
    16
       poolDictionaries:''
7ad01559b262 Initial revision
claus
parents:
diff changeset
    17
       category:'System-Compiler-Support'
7ad01559b262 Initial revision
claus
parents:
diff changeset
    18
!
7ad01559b262 Initial revision
claus
parents:
diff changeset
    19
7ad01559b262 Initial revision
claus
parents:
diff changeset
    20
BinaryNode comment:'
4
f6fd83437415 *** empty log message ***
claus
parents: 3
diff changeset
    21
COPYRIGHT (c) 1989 by Claus Gittinger
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
    22
              All Rights Reserved
7ad01559b262 Initial revision
claus
parents:
diff changeset
    23
13
30e69e21d1d1 *** empty log message ***
claus
parents: 6
diff changeset
    24
$Header: /cvs/stx/stx/libcomp/BinaryNode.st,v 1.5 1994-01-16 03:51:32 claus Exp $
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
    25
'!
7ad01559b262 Initial revision
claus
parents:
diff changeset
    26
7ad01559b262 Initial revision
claus
parents:
diff changeset
    27
!BinaryNode methodsFor:'queries'!
7ad01559b262 Initial revision
claus
parents:
diff changeset
    28
7ad01559b262 Initial revision
claus
parents:
diff changeset
    29
isBinaryMessage
7ad01559b262 Initial revision
claus
parents:
diff changeset
    30
    ^ true
7ad01559b262 Initial revision
claus
parents:
diff changeset
    31
! !
7ad01559b262 Initial revision
claus
parents:
diff changeset
    32
7ad01559b262 Initial revision
claus
parents:
diff changeset
    33
!BinaryNode methodsFor:'accessing'!
7ad01559b262 Initial revision
claus
parents:
diff changeset
    34
7ad01559b262 Initial revision
claus
parents:
diff changeset
    35
arg
7ad01559b262 Initial revision
claus
parents:
diff changeset
    36
    ^ argArray at:1
7ad01559b262 Initial revision
claus
parents:
diff changeset
    37
! !
7ad01559b262 Initial revision
claus
parents:
diff changeset
    38
7ad01559b262 Initial revision
claus
parents:
diff changeset
    39
!BinaryNode methodsFor:'evaluating'!
7ad01559b262 Initial revision
claus
parents:
diff changeset
    40
7ad01559b262 Initial revision
claus
parents:
diff changeset
    41
evaluate
13
30e69e21d1d1 *** empty log message ***
claus
parents: 6
diff changeset
    42
    receiver isSuper ifTrue:[
30e69e21d1d1 *** empty log message ***
claus
parents: 6
diff changeset
    43
        ^ super evaluate
30e69e21d1d1 *** empty log message ***
claus
parents: 6
diff changeset
    44
    ].
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
    45
    ^ (receiver evaluate) perform:selector with:(argArray at:1) evaluate
7ad01559b262 Initial revision
claus
parents:
diff changeset
    46
! !
7ad01559b262 Initial revision
claus
parents:
diff changeset
    47
7ad01559b262 Initial revision
claus
parents:
diff changeset
    48
!BinaryNode methodsFor:'code generation'!
7ad01559b262 Initial revision
claus
parents:
diff changeset
    49
7ad01559b262 Initial revision
claus
parents:
diff changeset
    50
codeOn:aStream inBlock:b
7ad01559b262 Initial revision
claus
parents:
diff changeset
    51
    |arg1|
7ad01559b262 Initial revision
claus
parents:
diff changeset
    52
7ad01559b262 Initial revision
claus
parents:
diff changeset
    53
    (receiver type == #Super) ifFalse:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
    54
        ( #(== ~~ = ~= + - < <= > >=) includes:selector) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
    55
            receiver codeOn:aStream inBlock:b.
7ad01559b262 Initial revision
claus
parents:
diff changeset
    56
            arg1 := argArray at:1.
7ad01559b262 Initial revision
claus
parents:
diff changeset
    57
            arg1 isConstant ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
    58
                (arg1 type == #Integer) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
    59
                    ((selector == #==) or:[selector == #~~]) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
    60
                        (arg1 value == 0) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
    61
                            (selector == #==) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
    62
                                aStream nextPut:#eq0
7ad01559b262 Initial revision
claus
parents:
diff changeset
    63
                            ] ifFalse:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
    64
                                aStream nextPut:#ne0
7ad01559b262 Initial revision
claus
parents:
diff changeset
    65
                            ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
    66
                            ^ self
7ad01559b262 Initial revision
claus
parents:
diff changeset
    67
                        ]
7ad01559b262 Initial revision
claus
parents:
diff changeset
    68
                    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
    69
                    ((selector == #+) or:[selector == #-]) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
    70
                        (arg1 value == 1) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
    71
                            (selector == #+) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
    72
                                aStream nextPut:#plus1
7ad01559b262 Initial revision
claus
parents:
diff changeset
    73
                            ] ifFalse:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
    74
                                aStream nextPut:#minus1
7ad01559b262 Initial revision
claus
parents:
diff changeset
    75
                            ].
13
30e69e21d1d1 *** empty log message ***
claus
parents: 6
diff changeset
    76
                            aStream nextPut:lineNr.
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
    77
                            ^ self
7ad01559b262 Initial revision
claus
parents:
diff changeset
    78
                        ]
7ad01559b262 Initial revision
claus
parents:
diff changeset
    79
                    ]
7ad01559b262 Initial revision
claus
parents:
diff changeset
    80
                ]
7ad01559b262 Initial revision
claus
parents:
diff changeset
    81
            ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
    82
            arg1 codeOn:aStream inBlock:b.
7ad01559b262 Initial revision
claus
parents:
diff changeset
    83
            aStream nextPut:selector.
13
30e69e21d1d1 *** empty log message ***
claus
parents: 6
diff changeset
    84
            (self class hasLineNumber:selector) ifTrue:[
30e69e21d1d1 *** empty log message ***
claus
parents: 6
diff changeset
    85
                aStream nextPut:lineNr.
30e69e21d1d1 *** empty log message ***
claus
parents: 6
diff changeset
    86
            ].
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
    87
            ^ self
7ad01559b262 Initial revision
claus
parents:
diff changeset
    88
        ]
7ad01559b262 Initial revision
claus
parents:
diff changeset
    89
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
    90
    ^ super codeOn:aStream inBlock:b
7ad01559b262 Initial revision
claus
parents:
diff changeset
    91
! !
7ad01559b262 Initial revision
claus
parents:
diff changeset
    92
7ad01559b262 Initial revision
claus
parents:
diff changeset
    93
!BinaryNode methodsFor:'printing'!
7ad01559b262 Initial revision
claus
parents:
diff changeset
    94
7ad01559b262 Initial revision
claus
parents:
diff changeset
    95
printOn:aStream indent:i
7ad01559b262 Initial revision
claus
parents:
diff changeset
    96
    |needParen|
7ad01559b262 Initial revision
claus
parents:
diff changeset
    97
7ad01559b262 Initial revision
claus
parents:
diff changeset
    98
    needParen := false.
7ad01559b262 Initial revision
claus
parents:
diff changeset
    99
    receiver isMessage ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   100
        receiver isUnaryMessage ifFalse:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   101
            needParen := true
7ad01559b262 Initial revision
claus
parents:
diff changeset
   102
        ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   103
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   104
    needParen ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   105
        aStream nextPutAll:'('
7ad01559b262 Initial revision
claus
parents:
diff changeset
   106
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   107
    receiver printOn:aStream.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   108
    needParen ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   109
        aStream nextPutAll:') '
7ad01559b262 Initial revision
claus
parents:
diff changeset
   110
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   111
7ad01559b262 Initial revision
claus
parents:
diff changeset
   112
    aStream space.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   113
    selector printString printOn:aStream.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   114
    aStream space.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   115
7ad01559b262 Initial revision
claus
parents:
diff changeset
   116
    needParen := false.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   117
    self arg isMessage ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   118
        self arg isUnaryMessage ifFalse:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   119
            needParen := true
7ad01559b262 Initial revision
claus
parents:
diff changeset
   120
        ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   121
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   122
    needParen ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   123
        aStream nextPutAll:'('
7ad01559b262 Initial revision
claus
parents:
diff changeset
   124
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   125
    self arg printOn:aStream.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   126
    needParen ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   127
        aStream nextPutAll:') '
7ad01559b262 Initial revision
claus
parents:
diff changeset
   128
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   129
! !