--- a/BinaryNode.st Tue Feb 28 22:02:33 1995 +0100
+++ b/BinaryNode.st Mon Mar 06 20:20:39 1995 +0100
@@ -21,7 +21,7 @@
COPYRIGHT (c) 1989 by Claus Gittinger
All Rights Reserved
-$Header: /cvs/stx/stx/libcomp/BinaryNode.st,v 1.9 1994-11-28 20:58:47 claus Exp $
+$Header: /cvs/stx/stx/libcomp/BinaryNode.st,v 1.10 1995-03-06 19:19:46 claus Exp $
'!
!BinaryNode class methodsFor:'documentation'!
@@ -42,7 +42,7 @@
version
"
-$Header: /cvs/stx/stx/libcomp/BinaryNode.st,v 1.9 1994-11-28 20:58:47 claus Exp $
+$Header: /cvs/stx/stx/libcomp/BinaryNode.st,v 1.10 1995-03-06 19:19:46 claus Exp $
"
!
@@ -76,16 +76,56 @@
!BinaryNode methodsFor:'code generation'!
codeOn:aStream inBlock:b
- |arg1|
+ |arg1 recVal argVal|
receiver isSuper ifFalse:[
( #(== ~~ = ~= + - < <= > >=) includes:selector) ifTrue:[
+ arg1 := argArray at:1.
+
+ receiver isConstant ifTrue:[
+ recVal := receiver value.
+ (receiver type == #Integer) ifTrue:[
+ ((selector == #==) or:[selector == #~~]) ifTrue:[
+ recVal == 0 ifTrue:[
+ arg1 codeOn:aStream inBlock:b.
+ (selector == #==) ifTrue:[
+ aStream nextPut:#eq0
+ ] ifFalse:[
+ aStream nextPut:#ne0
+ ].
+ ^ self
+ ]
+ ].
+ ].
+ recVal == nil ifTrue:[
+ arg1 codeOn:aStream inBlock:b.
+ (selector == #==) ifTrue:[
+ aStream nextPut:#isNil
+ ] ifFalse:[
+ aStream nextPut:#notNil
+ ].
+ ^ self
+ ].
+ (selector == #+) ifTrue:[
+ (recVal == 1) ifTrue:[
+ arg1 codeOn:aStream inBlock:b.
+ (selector == #+) ifTrue:[
+ aStream nextPut:#plus1
+ ] ifFalse:[
+ aStream nextPut:#minus1
+ ].
+ aStream nextPut:lineNr.
+ ^ self
+ ]
+ ]
+ ].
+
receiver codeOn:aStream inBlock:b.
- arg1 := argArray at:1.
arg1 isConstant ifTrue:[
+ argVal := arg1 value.
(arg1 type == #Integer) ifTrue:[
((selector == #==) or:[selector == #~~]) ifTrue:[
- (arg1 value == 0) ifTrue:[
+ (argVal == 0) ifTrue:[
(selector == #==) ifTrue:[
aStream nextPut:#eq0
] ifFalse:[
@@ -95,7 +135,7 @@
]
].
((selector == #+) or:[selector == #-]) ifTrue:[
- (arg1 value == 1) ifTrue:[
+ (argVal == 1) ifTrue:[
(selector == #+) ifTrue:[
aStream nextPut:#plus1
] ifFalse:[
@@ -105,6 +145,16 @@
^ self
]
]
+ ].
+ argVal isNil ifTrue:[
+ (selector == #==) ifTrue:[
+ aStream nextPut:#isNil.
+ ^ self
+ ].
+ (selector == #~~) ifTrue:[
+ aStream nextPut:#notNil.
+ ^ self
+ ].
]
].
arg1 codeOn:aStream inBlock:b.