BinaryNd.st
author claus
Sat, 11 Dec 1993 02:09:49 +0100
changeset 7 6c2bc76f0b8f
parent 6 0cd4e7480440
child 13 30e69e21d1d1
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
6
0cd4e7480440 *** empty log message ***
claus
parents: 4
diff changeset
    24
$Header: /cvs/stx/stx/libcomp/Attic/BinaryNd.st,v 1.4 1993-12-11 01:06:12 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
7ad01559b262 Initial revision
claus
parents:
diff changeset
    42
    ^ (receiver evaluate) perform:selector with:(argArray at:1) evaluate
7ad01559b262 Initial revision
claus
parents:
diff changeset
    43
! !
7ad01559b262 Initial revision
claus
parents:
diff changeset
    44
7ad01559b262 Initial revision
claus
parents:
diff changeset
    45
!BinaryNode methodsFor:'code generation'!
7ad01559b262 Initial revision
claus
parents:
diff changeset
    46
7ad01559b262 Initial revision
claus
parents:
diff changeset
    47
codeOn:aStream inBlock:b
7ad01559b262 Initial revision
claus
parents:
diff changeset
    48
    |arg1|
7ad01559b262 Initial revision
claus
parents:
diff changeset
    49
7ad01559b262 Initial revision
claus
parents:
diff changeset
    50
    (receiver type == #Super) ifFalse:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
    51
        ( #(== ~~ = ~= + - < <= > >=) includes:selector) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
    52
            receiver codeOn:aStream inBlock:b.
7ad01559b262 Initial revision
claus
parents:
diff changeset
    53
            arg1 := argArray at:1.
7ad01559b262 Initial revision
claus
parents:
diff changeset
    54
            arg1 isConstant ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
    55
                (arg1 type == #Integer) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
    56
                    ((selector == #==) or:[selector == #~~]) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
    57
                        (arg1 value == 0) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
    58
                            (selector == #==) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
    59
                                aStream nextPut:#eq0
7ad01559b262 Initial revision
claus
parents:
diff changeset
    60
                            ] ifFalse:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
    61
                                aStream nextPut:#ne0
7ad01559b262 Initial revision
claus
parents:
diff changeset
    62
                            ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
    63
                            ^ self
7ad01559b262 Initial revision
claus
parents:
diff changeset
    64
                        ]
7ad01559b262 Initial revision
claus
parents:
diff changeset
    65
                    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
    66
                    ((selector == #+) or:[selector == #-]) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
    67
                        (arg1 value == 1) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
    68
                            (selector == #+) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
    69
                                aStream nextPut:#plus1
7ad01559b262 Initial revision
claus
parents:
diff changeset
    70
                            ] ifFalse:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
    71
                                aStream nextPut:#minus1
7ad01559b262 Initial revision
claus
parents:
diff changeset
    72
                            ].
6
0cd4e7480440 *** empty log message ***
claus
parents: 4
diff changeset
    73
			    aStream nextPut:lineNr.
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
    74
                            ^ self
7ad01559b262 Initial revision
claus
parents:
diff changeset
    75
                        ]
7ad01559b262 Initial revision
claus
parents:
diff changeset
    76
                    ]
7ad01559b262 Initial revision
claus
parents:
diff changeset
    77
                ]
7ad01559b262 Initial revision
claus
parents:
diff changeset
    78
            ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
    79
            arg1 codeOn:aStream inBlock:b.
7ad01559b262 Initial revision
claus
parents:
diff changeset
    80
            aStream nextPut:selector.
6
0cd4e7480440 *** empty log message ***
claus
parents: 4
diff changeset
    81
	    (self class hasLineNumber:selector) ifTrue:[
0cd4e7480440 *** empty log message ***
claus
parents: 4
diff changeset
    82
	        aStream nextPut:lineNr.
0cd4e7480440 *** empty log message ***
claus
parents: 4
diff changeset
    83
	    ].
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
    84
            ^ self
7ad01559b262 Initial revision
claus
parents:
diff changeset
    85
        ]
7ad01559b262 Initial revision
claus
parents:
diff changeset
    86
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
    87
    ^ super codeOn:aStream inBlock:b
7ad01559b262 Initial revision
claus
parents:
diff changeset
    88
! !
7ad01559b262 Initial revision
claus
parents:
diff changeset
    89
7ad01559b262 Initial revision
claus
parents:
diff changeset
    90
!BinaryNode methodsFor:'printing'!
7ad01559b262 Initial revision
claus
parents:
diff changeset
    91
7ad01559b262 Initial revision
claus
parents:
diff changeset
    92
printOn:aStream indent:i
7ad01559b262 Initial revision
claus
parents:
diff changeset
    93
    |needParen|
7ad01559b262 Initial revision
claus
parents:
diff changeset
    94
7ad01559b262 Initial revision
claus
parents:
diff changeset
    95
    needParen := false.
7ad01559b262 Initial revision
claus
parents:
diff changeset
    96
    receiver isMessage ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
    97
        receiver isUnaryMessage ifFalse:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
    98
            needParen := true
7ad01559b262 Initial revision
claus
parents:
diff changeset
    99
        ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   100
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   101
    needParen ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   102
        aStream nextPutAll:'('
7ad01559b262 Initial revision
claus
parents:
diff changeset
   103
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   104
    receiver printOn:aStream.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   105
    needParen ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   106
        aStream nextPutAll:') '
7ad01559b262 Initial revision
claus
parents:
diff changeset
   107
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   108
7ad01559b262 Initial revision
claus
parents:
diff changeset
   109
    aStream space.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   110
    selector printString printOn:aStream.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   111
    aStream space.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   112
7ad01559b262 Initial revision
claus
parents:
diff changeset
   113
    needParen := false.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   114
    self arg isMessage ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   115
        self arg isUnaryMessage ifFalse:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   116
            needParen := true
7ad01559b262 Initial revision
claus
parents:
diff changeset
   117
        ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   118
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   119
    needParen ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   120
        aStream nextPutAll:'('
7ad01559b262 Initial revision
claus
parents:
diff changeset
   121
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   122
    self arg printOn:aStream.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   123
    needParen ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   124
        aStream nextPutAll:') '
7ad01559b262 Initial revision
claus
parents:
diff changeset
   125
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   126
! !