BinaryNode.st
changeset 76 55d64cb1ffea
parent 52 d80ec10c3321
child 96 ae3b3d960476
--- 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.