.
authorclaus
Fri, 11 Aug 1995 22:28:40 +0200
changeset 104 2016bfa4cd45
parent 103 f4a69d7dd387
child 105 16fd75fcbd3b
.
AssignNd.st
AssignmentNode.st
BCompiler.st
BinaryNd.st
BinaryNode.st
BlockNode.st
ByteCodeCompiler.st
CascadeNd.st
CascadeNode.st
ConstNode.st
ConstantNode.st
MessageNd.st
MessageNode.st
ParseNode.st
PrimNd.st
PrimaryNd.st
PrimaryNode.st
PrimitiveNode.st
RetNode.st
ReturnNode.st
SelfNode.st
StatNode.st
StatementNode.st
UnaryNd.st
UnaryNode.st
VarNode.st
VariableNode.st
--- a/AssignNd.st	Fri Aug 11 18:04:27 1995 +0200
+++ b/AssignNd.st	Fri Aug 11 22:28:40 1995 +0200
@@ -21,7 +21,7 @@
 COPYRIGHT (c) 1989 by Claus Gittinger
 	      All Rights Reserved
 
-$Header: /cvs/stx/stx/libcomp/Attic/AssignNd.st,v 1.10 1995-08-11 16:02:33 claus Exp $
+$Header: /cvs/stx/stx/libcomp/Attic/AssignNd.st,v 1.11 1995-08-11 20:27:30 claus Exp $
 '!
 
 !AssignmentNode class methodsFor:'documentation'!
@@ -42,7 +42,7 @@
 
 version
 "
-$Header: /cvs/stx/stx/libcomp/Attic/AssignNd.st,v 1.10 1995-08-11 16:02:33 claus Exp $
+$Header: /cvs/stx/stx/libcomp/Attic/AssignNd.st,v 1.11 1995-08-11 20:27:30 claus Exp $
 "
 !
 
@@ -88,7 +88,7 @@
 
 !AssignmentNode methodsFor:'code generation'!
 
-codeForSideEffectOn:aStream inBlock:b
+codeForSideEffectOn:aStream inBlock:b for:aCompiler
     |sel arg|
 
     (variable type == #MethodVariable) ifTrue:[
@@ -115,13 +115,13 @@
 	    ]
 	]
     ].
-    expression codeOn:aStream inBlock:b.
-    variable codeStoreOn:aStream inBlock:b valueNeeded:false
+    expression codeOn:aStream inBlock:b for:aCompiler.
+    variable codeStoreOn:aStream inBlock:b valueNeeded:false for:aCompiler
 !
 
-codeOn:aStream inBlock:b
-    expression codeOn:aStream inBlock:b.
-    variable codeStoreOn:aStream inBlock:b valueNeeded:true
+codeOn:aStream inBlock:b for:aCompiler
+    expression codeOn:aStream inBlock:b for:aCompiler.
+    variable codeStoreOn:aStream inBlock:b valueNeeded:true for:aCompiler
 ! !
 
 !AssignmentNode methodsFor:'printing'!
--- a/AssignmentNode.st	Fri Aug 11 18:04:27 1995 +0200
+++ b/AssignmentNode.st	Fri Aug 11 22:28:40 1995 +0200
@@ -21,7 +21,7 @@
 COPYRIGHT (c) 1989 by Claus Gittinger
 	      All Rights Reserved
 
-$Header: /cvs/stx/stx/libcomp/AssignmentNode.st,v 1.10 1995-08-11 16:02:33 claus Exp $
+$Header: /cvs/stx/stx/libcomp/AssignmentNode.st,v 1.11 1995-08-11 20:27:30 claus Exp $
 '!
 
 !AssignmentNode class methodsFor:'documentation'!
@@ -42,7 +42,7 @@
 
 version
 "
-$Header: /cvs/stx/stx/libcomp/AssignmentNode.st,v 1.10 1995-08-11 16:02:33 claus Exp $
+$Header: /cvs/stx/stx/libcomp/AssignmentNode.st,v 1.11 1995-08-11 20:27:30 claus Exp $
 "
 !
 
@@ -88,7 +88,7 @@
 
 !AssignmentNode methodsFor:'code generation'!
 
-codeForSideEffectOn:aStream inBlock:b
+codeForSideEffectOn:aStream inBlock:b for:aCompiler
     |sel arg|
 
     (variable type == #MethodVariable) ifTrue:[
@@ -115,13 +115,13 @@
 	    ]
 	]
     ].
-    expression codeOn:aStream inBlock:b.
-    variable codeStoreOn:aStream inBlock:b valueNeeded:false
+    expression codeOn:aStream inBlock:b for:aCompiler.
+    variable codeStoreOn:aStream inBlock:b valueNeeded:false for:aCompiler
 !
 
-codeOn:aStream inBlock:b
-    expression codeOn:aStream inBlock:b.
-    variable codeStoreOn:aStream inBlock:b valueNeeded:true
+codeOn:aStream inBlock:b for:aCompiler
+    expression codeOn:aStream inBlock:b for:aCompiler.
+    variable codeStoreOn:aStream inBlock:b valueNeeded:true for:aCompiler
 ! !
 
 !AssignmentNode methodsFor:'printing'!
--- a/BCompiler.st	Fri Aug 11 18:04:27 1995 +0200
+++ b/BCompiler.st	Fri Aug 11 22:28:40 1995 +0200
@@ -26,7 +26,7 @@
 COPYRIGHT (c) 1989 by Claus Gittinger
 	     All Rights Reserved
 
-$Header: /cvs/stx/stx/libcomp/Attic/BCompiler.st,v 1.30 1995-08-11 16:02:38 claus Exp $
+$Header: /cvs/stx/stx/libcomp/Attic/BCompiler.st,v 1.31 1995-08-11 20:27:34 claus Exp $
 '!
 
 !ByteCodeCompiler class methodsFor:'documentation'!
@@ -47,7 +47,7 @@
 
 version
 "
-$Header: /cvs/stx/stx/libcomp/Attic/BCompiler.st,v 1.30 1995-08-11 16:02:38 claus Exp $
+$Header: /cvs/stx/stx/libcomp/Attic/BCompiler.st,v 1.31 1995-08-11 20:27:34 claus Exp $
 "
 !
 
@@ -593,11 +593,13 @@
 
     |codeStream thisStatement lastStatement|
 
+    litArray := nil.
     codeStream := WriteStream on:(OrderedCollection new:100).
+
     thisStatement := tree.
     [thisStatement notNil] whileTrue:[
 	lastStatement := thisStatement.
-	thisStatement codeForSideEffectOn:codeStream inBlock:nil.
+	thisStatement codeForSideEffectOn:codeStream inBlock:nil for:self.
 	thisStatement := thisStatement nextStatement
     ].
     (lastStatement isNil or:[lastStatement isReturnNode not])
@@ -659,7 +661,6 @@
     symCodeSize := symbolicCodeArray size.
     codeSize := symCodeSize.
 
-    litArray := nil.
     [needRetry] whileTrue:[
 	stackDepth := 0.
 	maxStackDepth := 0.
--- a/BinaryNd.st	Fri Aug 11 18:04:27 1995 +0200
+++ b/BinaryNd.st	Fri Aug 11 22:28:40 1995 +0200
@@ -21,7 +21,7 @@
 COPYRIGHT (c) 1989 by Claus Gittinger
 	      All Rights Reserved
 
-$Header: /cvs/stx/stx/libcomp/Attic/BinaryNd.st,v 1.13 1995-08-11 16:02:44 claus Exp $
+$Header: /cvs/stx/stx/libcomp/Attic/BinaryNd.st,v 1.14 1995-08-11 20:27:40 claus Exp $
 '!
 
 !BinaryNode class methodsFor:'documentation'!
@@ -42,7 +42,7 @@
 
 version
 "
-$Header: /cvs/stx/stx/libcomp/Attic/BinaryNd.st,v 1.13 1995-08-11 16:02:44 claus Exp $
+$Header: /cvs/stx/stx/libcomp/Attic/BinaryNd.st,v 1.14 1995-08-11 20:27:40 claus Exp $
 "
 !
 
@@ -75,7 +75,7 @@
 
 !BinaryNode methodsFor:'code generation'!
 
-codeOn:aStream inBlock:b
+codeOn:aStream inBlock:b for:aCompiler
     |arg1 recVal argVal code|
 
     receiver isSuper ifFalse:[
@@ -87,7 +87,7 @@
 		(receiver type == #Integer) ifTrue:[
 		    ((selector == #==) or:[selector == #~~]) ifTrue:[
 			recVal == 0 ifTrue:[
-			    arg1 codeOn:aStream inBlock:b.
+			    arg1 codeOn:aStream inBlock:b for:aCompiler.
 			    (selector == #==) ifTrue:[
 				code := #eq0
 			    ] ifFalse:[
@@ -99,7 +99,7 @@
 		    ].
 		].
 		recVal == nil ifTrue:[
-		    arg1 codeOn:aStream inBlock:b.
+		    arg1 codeOn:aStream inBlock:b for:aCompiler.
 		    (selector == #==) ifTrue:[
 			code := #isNil 
 		    ] ifFalse:[
@@ -110,7 +110,7 @@
 		].
 		(selector == #+) ifTrue:[
 		    (recVal == 1) ifTrue:[
-			arg1 codeOn:aStream inBlock:b.
+			arg1 codeOn:aStream inBlock:b for:aCompiler.
 			(selector == #+) ifTrue:[
 			    code := #plus1
 			] ifFalse:[
@@ -122,7 +122,7 @@
 		]
 	    ].
 
-	    receiver codeOn:aStream inBlock:b.
+	    receiver codeOn:aStream inBlock:b for:aCompiler.
 	    arg1 isConstant ifTrue:[
 		argVal := arg1 value.
 		(arg1 type == #Integer) ifTrue:[
@@ -166,7 +166,7 @@
 		    ].
 		]
 	    ].
-	    arg1 codeOn:aStream inBlock:b.
+	    arg1 codeOn:aStream inBlock:b for:aCompiler.
 	    aStream nextPut:selector.
 	    (self class hasLineNumber:selector) ifTrue:[
 		aStream nextPut:lineNr.
@@ -174,7 +174,7 @@
 	    ^ self
 	]
     ].
-    ^ super codeOn:aStream inBlock:b
+    ^ super codeOn:aStream inBlock:b for:aCompiler
 ! !
 
 !BinaryNode methodsFor:'printing'!
--- a/BinaryNode.st	Fri Aug 11 18:04:27 1995 +0200
+++ b/BinaryNode.st	Fri Aug 11 22:28:40 1995 +0200
@@ -21,7 +21,7 @@
 COPYRIGHT (c) 1989 by Claus Gittinger
 	      All Rights Reserved
 
-$Header: /cvs/stx/stx/libcomp/BinaryNode.st,v 1.13 1995-08-11 16:02:44 claus Exp $
+$Header: /cvs/stx/stx/libcomp/BinaryNode.st,v 1.14 1995-08-11 20:27:40 claus Exp $
 '!
 
 !BinaryNode class methodsFor:'documentation'!
@@ -42,7 +42,7 @@
 
 version
 "
-$Header: /cvs/stx/stx/libcomp/BinaryNode.st,v 1.13 1995-08-11 16:02:44 claus Exp $
+$Header: /cvs/stx/stx/libcomp/BinaryNode.st,v 1.14 1995-08-11 20:27:40 claus Exp $
 "
 !
 
@@ -75,7 +75,7 @@
 
 !BinaryNode methodsFor:'code generation'!
 
-codeOn:aStream inBlock:b
+codeOn:aStream inBlock:b for:aCompiler
     |arg1 recVal argVal code|
 
     receiver isSuper ifFalse:[
@@ -87,7 +87,7 @@
 		(receiver type == #Integer) ifTrue:[
 		    ((selector == #==) or:[selector == #~~]) ifTrue:[
 			recVal == 0 ifTrue:[
-			    arg1 codeOn:aStream inBlock:b.
+			    arg1 codeOn:aStream inBlock:b for:aCompiler.
 			    (selector == #==) ifTrue:[
 				code := #eq0
 			    ] ifFalse:[
@@ -99,7 +99,7 @@
 		    ].
 		].
 		recVal == nil ifTrue:[
-		    arg1 codeOn:aStream inBlock:b.
+		    arg1 codeOn:aStream inBlock:b for:aCompiler.
 		    (selector == #==) ifTrue:[
 			code := #isNil 
 		    ] ifFalse:[
@@ -110,7 +110,7 @@
 		].
 		(selector == #+) ifTrue:[
 		    (recVal == 1) ifTrue:[
-			arg1 codeOn:aStream inBlock:b.
+			arg1 codeOn:aStream inBlock:b for:aCompiler.
 			(selector == #+) ifTrue:[
 			    code := #plus1
 			] ifFalse:[
@@ -122,7 +122,7 @@
 		]
 	    ].
 
-	    receiver codeOn:aStream inBlock:b.
+	    receiver codeOn:aStream inBlock:b for:aCompiler.
 	    arg1 isConstant ifTrue:[
 		argVal := arg1 value.
 		(arg1 type == #Integer) ifTrue:[
@@ -166,7 +166,7 @@
 		    ].
 		]
 	    ].
-	    arg1 codeOn:aStream inBlock:b.
+	    arg1 codeOn:aStream inBlock:b for:aCompiler.
 	    aStream nextPut:selector.
 	    (self class hasLineNumber:selector) ifTrue:[
 		aStream nextPut:lineNr.
@@ -174,7 +174,7 @@
 	    ^ self
 	]
     ].
-    ^ super codeOn:aStream inBlock:b
+    ^ super codeOn:aStream inBlock:b for:aCompiler
 ! !
 
 !BinaryNode methodsFor:'printing'!
--- a/BlockNode.st	Fri Aug 11 18:04:27 1995 +0200
+++ b/BlockNode.st	Fri Aug 11 22:28:40 1995 +0200
@@ -23,7 +23,7 @@
 COPYRIGHT (c) 1989 by Claus Gittinger
 	      All Rights Reserved
 
-$Header: /cvs/stx/stx/libcomp/BlockNode.st,v 1.16 1995-08-11 16:02:48 claus Exp $
+$Header: /cvs/stx/stx/libcomp/BlockNode.st,v 1.17 1995-08-11 20:27:44 claus Exp $
 '!
 
 !BlockNode class methodsFor:'documentation'!
@@ -44,7 +44,7 @@
 
 version
 "
-$Header: /cvs/stx/stx/libcomp/BlockNode.st,v 1.16 1995-08-11 16:02:48 claus Exp $
+$Header: /cvs/stx/stx/libcomp/BlockNode.st,v 1.17 1995-08-11 20:27:44 claus Exp $
 "
 !
 
@@ -355,12 +355,12 @@
 
 !BlockNode methodsFor:'code generation'!
 
-codeOn:aStream inBlock:b
+codeOn:aStream inBlock:b for:aCompiler
     |thisStatement nextStatement pos code cheapy|
 
     cheapy := self checkForSimpleBlock.
     cheapy notNil ifTrue:[
-	cheapy codeOn:aStream inBlock:b.
+	cheapy codeOn:aStream inBlock:b for:aCompiler.
 	^ self
     ].
 
@@ -377,9 +377,9 @@
 	[thisStatement notNil] whileTrue:[
 	    nextStatement := thisStatement nextStatement.
 	    nextStatement notNil ifTrue:[
-		thisStatement codeForSideEffectOn:aStream inBlock:self
+		thisStatement codeForSideEffectOn:aStream inBlock:self for:aCompiler
 	    ] ifFalse:[
-		thisStatement codeOn:aStream inBlock:self
+		thisStatement codeOn:aStream inBlock:self for:aCompiler
 	    ].
 	    thisStatement := nextStatement
 	]
@@ -416,14 +416,14 @@
     (aStream contents) at:pos+1 put:(aStream position)
 !
 
-codeForSideEffectOn:aStream inBlock:b
+codeForSideEffectOn:aStream inBlock:b for:aCompiler
     "generate code for this statement - value not needed.
      For blocks, no code is generated at all."
 
     ^ self
 !
 
-codeInlineOn:aStream inBlock:b valueNeeded:valueNeeded
+codeInlineOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler
     |thisStatement nextStatement|
 
     blockVars notNil ifTrue:[
@@ -431,7 +431,7 @@
 	 surrounding method. generate a make-block and send it value"
 
 "/        Transcript showCr:'cannot (yet) compile block with blockvars inline'.
-	self codeOn:aStream inBlock:b.
+	self codeOn:aStream inBlock:b for:aCompiler.
 	aStream nextPut:#value.
 	(MessageNode hasLineNumber:#value) ifTrue:[
 	    aStream nextPut:lineNr.
@@ -451,17 +451,17 @@
 	[thisStatement notNil] whileTrue:[
 	    nextStatement := thisStatement nextStatement.
 	    (nextStatement notNil or:[valueNeeded not]) ifTrue:[
-		thisStatement codeForSideEffectOn:aStream inBlock:b
+		thisStatement codeForSideEffectOn:aStream inBlock:b for:aCompiler
 	    ] ifFalse:[
-		thisStatement codeOn:aStream inBlock:b
+		thisStatement codeOn:aStream inBlock:b for:aCompiler
 	    ].
 	    thisStatement := nextStatement
 	]
     ]
 !
 
-codeInlineOn:aStream inBlock:b
-    self codeInlineOn:aStream inBlock:b valueNeeded:true
+codeInlineOn:aStream inBlock:b for:aCompiler
+    self codeInlineOn:aStream inBlock:b valueNeeded:true for:aCompiler
 !
 
 checkForSimpleBlock
--- a/ByteCodeCompiler.st	Fri Aug 11 18:04:27 1995 +0200
+++ b/ByteCodeCompiler.st	Fri Aug 11 22:28:40 1995 +0200
@@ -26,7 +26,7 @@
 COPYRIGHT (c) 1989 by Claus Gittinger
 	     All Rights Reserved
 
-$Header: /cvs/stx/stx/libcomp/ByteCodeCompiler.st,v 1.30 1995-08-11 16:02:38 claus Exp $
+$Header: /cvs/stx/stx/libcomp/ByteCodeCompiler.st,v 1.31 1995-08-11 20:27:34 claus Exp $
 '!
 
 !ByteCodeCompiler class methodsFor:'documentation'!
@@ -47,7 +47,7 @@
 
 version
 "
-$Header: /cvs/stx/stx/libcomp/ByteCodeCompiler.st,v 1.30 1995-08-11 16:02:38 claus Exp $
+$Header: /cvs/stx/stx/libcomp/ByteCodeCompiler.st,v 1.31 1995-08-11 20:27:34 claus Exp $
 "
 !
 
@@ -593,11 +593,13 @@
 
     |codeStream thisStatement lastStatement|
 
+    litArray := nil.
     codeStream := WriteStream on:(OrderedCollection new:100).
+
     thisStatement := tree.
     [thisStatement notNil] whileTrue:[
 	lastStatement := thisStatement.
-	thisStatement codeForSideEffectOn:codeStream inBlock:nil.
+	thisStatement codeForSideEffectOn:codeStream inBlock:nil for:self.
 	thisStatement := thisStatement nextStatement
     ].
     (lastStatement isNil or:[lastStatement isReturnNode not])
@@ -659,7 +661,6 @@
     symCodeSize := symbolicCodeArray size.
     codeSize := symCodeSize.
 
-    litArray := nil.
     [needRetry] whileTrue:[
 	stackDepth := 0.
 	maxStackDepth := 0.
--- a/CascadeNd.st	Fri Aug 11 18:04:27 1995 +0200
+++ b/CascadeNd.st	Fri Aug 11 22:28:40 1995 +0200
@@ -1,6 +1,6 @@
 "
  COPYRIGHT (c) 1989 by Claus Gittinger
-              All Rights Reserved
+	      All Rights Reserved
 
  This software is furnished under a license and may be used
  only in accordance with the terms of that license and with the
@@ -19,9 +19,9 @@
 
 CascadeNode comment:'
 COPYRIGHT (c) 1989 by Claus Gittinger
-              All Rights Reserved
+	      All Rights Reserved
 
-$Header: /cvs/stx/stx/libcomp/Attic/CascadeNd.st,v 1.9 1995-08-11 16:02:51 claus Exp $
+$Header: /cvs/stx/stx/libcomp/Attic/CascadeNd.st,v 1.10 1995-08-11 20:27:48 claus Exp $
 '!
 
 !CascadeNode class methodsFor:'documentation'!
@@ -29,7 +29,7 @@
 copyright
 "
  COPYRIGHT (c) 1989 by Claus Gittinger
-              All Rights Reserved
+	      All Rights Reserved
 
  This software is furnished under a license and may be used
  only in accordance with the terms of that license and with the
@@ -42,7 +42,7 @@
 
 version
 "
-$Header: /cvs/stx/stx/libcomp/Attic/CascadeNd.st,v 1.9 1995-08-11 16:02:51 claus Exp $
+$Header: /cvs/stx/stx/libcomp/Attic/CascadeNd.st,v 1.10 1995-08-11 20:27:48 claus Exp $
 "
 !
 
@@ -54,15 +54,15 @@
 
 !CascadeNode methodsFor: 'code generation'!
 
-codeOn:aStream inBlock:b valueNeeded:valueNeeded
-    receiver codeForCascadeOn:aStream inBlock:b.
-    self codeSendOn:aStream inBlock:b valueNeeded:valueNeeded
+codeOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler
+    receiver codeForCascadeOn:aStream inBlock:b for:aCompiler.
+    self codeSendOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler
 !
 
-codeForCascadeOn:aStream inBlock:b
-    receiver codeForCascadeOn:aStream inBlock:b.
+codeForCascadeOn:aStream inBlock:b for:aCompiler
+    receiver codeForCascadeOn:aStream inBlock:b for:aCompiler.
     aStream nextPut:#dup.
-    self codeSendOn:aStream inBlock:b valueNeeded:false
+    self codeSendOn:aStream inBlock:b valueNeeded:false for:aCompiler
 ! !
 
 !CascadeNode methodsFor: 'printing'!
@@ -73,12 +73,12 @@
     index := 1.
     selectorParts := OrderedCollection new.
     [index == 0] whileFalse:[
-        index2 := selector indexOf:$: startingAt:index.
-        index2 ~~ 0 ifTrue:[
-            selectorParts add:(selector copyFrom:index to:index2).
-            index2 := index2 + 1
-        ].
-        index := index2
+	index2 := selector indexOf:$: startingAt:index.
+	index2 ~~ 0 ifTrue:[
+	    selectorParts add:(selector copyFrom:index to:index2).
+	    index2 := index2 + 1
+	].
+	index := index2
     ].
 
     receiver printOn:aStream indent:i.
@@ -86,29 +86,29 @@
 
     nargs := argArray size.
     nargs == 0 ifTrue:[
-        selector printOn:aStream
+	selector printOn:aStream
     ] ifFalse:[
-        1 to:nargs do:[:argIndex |
-            aStream space.
-            (selectorParts at:argIndex) printOn:aStream.
-            aStream space.
-            arg := argArray at:argIndex.
-            needParen := false.
-            arg isMessage ifTrue:[
-                arg isBinaryMessage ifFalse:[
-                    arg isUnaryMessage ifFalse:[
-                        needParen := true
-                    ]
-                ].
-            ].
-            needParen ifTrue:[
-                aStream nextPutAll:'('
-            ].
-            arg printOn:aStream indent:i.
-            needParen ifTrue:[
-                aStream nextPutAll:') '
-            ].
-        ]
+	1 to:nargs do:[:argIndex |
+	    aStream space.
+	    (selectorParts at:argIndex) printOn:aStream.
+	    aStream space.
+	    arg := argArray at:argIndex.
+	    needParen := false.
+	    arg isMessage ifTrue:[
+		arg isBinaryMessage ifFalse:[
+		    arg isUnaryMessage ifFalse:[
+			needParen := true
+		    ]
+		].
+	    ].
+	    needParen ifTrue:[
+		aStream nextPutAll:'('
+	    ].
+	    arg printOn:aStream indent:i.
+	    needParen ifTrue:[
+		aStream nextPutAll:') '
+	    ].
+	]
     ]
 ! !
 
@@ -118,13 +118,13 @@
     |t argValueArray|
 
     receiver isSuper ifTrue:[
-        ^ super evaluate
+	^ super evaluate
     ].
 
     t := receiver evaluateForCascade.
     argArray isNil ifTrue:[
-        t perform:selector.
-        ^ t
+	t perform:selector.
+	^ t
     ].
     argValueArray := argArray collect:[:arg | arg evaluate].
     ^ t perform:selector withArguments:argValueArray
@@ -134,13 +134,13 @@
     |t argValueArray|
 
     receiver isSuper ifTrue:[
-        ^ super evaluateForCascade
+	^ super evaluateForCascade
     ].
 
     t := receiver evaluateForCascade.
     argArray isNil ifTrue:[
-        t perform:selector.
-        ^ t
+	t perform:selector.
+	^ t
     ].
     argValueArray := argArray collect:[:arg | arg evaluate]. 
     t perform:selector withArguments:argValueArray.
--- a/CascadeNode.st	Fri Aug 11 18:04:27 1995 +0200
+++ b/CascadeNode.st	Fri Aug 11 22:28:40 1995 +0200
@@ -1,6 +1,6 @@
 "
  COPYRIGHT (c) 1989 by Claus Gittinger
-              All Rights Reserved
+	      All Rights Reserved
 
  This software is furnished under a license and may be used
  only in accordance with the terms of that license and with the
@@ -19,9 +19,9 @@
 
 CascadeNode comment:'
 COPYRIGHT (c) 1989 by Claus Gittinger
-              All Rights Reserved
+	      All Rights Reserved
 
-$Header: /cvs/stx/stx/libcomp/CascadeNode.st,v 1.9 1995-08-11 16:02:51 claus Exp $
+$Header: /cvs/stx/stx/libcomp/CascadeNode.st,v 1.10 1995-08-11 20:27:48 claus Exp $
 '!
 
 !CascadeNode class methodsFor:'documentation'!
@@ -29,7 +29,7 @@
 copyright
 "
  COPYRIGHT (c) 1989 by Claus Gittinger
-              All Rights Reserved
+	      All Rights Reserved
 
  This software is furnished under a license and may be used
  only in accordance with the terms of that license and with the
@@ -42,7 +42,7 @@
 
 version
 "
-$Header: /cvs/stx/stx/libcomp/CascadeNode.st,v 1.9 1995-08-11 16:02:51 claus Exp $
+$Header: /cvs/stx/stx/libcomp/CascadeNode.st,v 1.10 1995-08-11 20:27:48 claus Exp $
 "
 !
 
@@ -54,15 +54,15 @@
 
 !CascadeNode methodsFor: 'code generation'!
 
-codeOn:aStream inBlock:b valueNeeded:valueNeeded
-    receiver codeForCascadeOn:aStream inBlock:b.
-    self codeSendOn:aStream inBlock:b valueNeeded:valueNeeded
+codeOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler
+    receiver codeForCascadeOn:aStream inBlock:b for:aCompiler.
+    self codeSendOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler
 !
 
-codeForCascadeOn:aStream inBlock:b
-    receiver codeForCascadeOn:aStream inBlock:b.
+codeForCascadeOn:aStream inBlock:b for:aCompiler
+    receiver codeForCascadeOn:aStream inBlock:b for:aCompiler.
     aStream nextPut:#dup.
-    self codeSendOn:aStream inBlock:b valueNeeded:false
+    self codeSendOn:aStream inBlock:b valueNeeded:false for:aCompiler
 ! !
 
 !CascadeNode methodsFor: 'printing'!
@@ -73,12 +73,12 @@
     index := 1.
     selectorParts := OrderedCollection new.
     [index == 0] whileFalse:[
-        index2 := selector indexOf:$: startingAt:index.
-        index2 ~~ 0 ifTrue:[
-            selectorParts add:(selector copyFrom:index to:index2).
-            index2 := index2 + 1
-        ].
-        index := index2
+	index2 := selector indexOf:$: startingAt:index.
+	index2 ~~ 0 ifTrue:[
+	    selectorParts add:(selector copyFrom:index to:index2).
+	    index2 := index2 + 1
+	].
+	index := index2
     ].
 
     receiver printOn:aStream indent:i.
@@ -86,29 +86,29 @@
 
     nargs := argArray size.
     nargs == 0 ifTrue:[
-        selector printOn:aStream
+	selector printOn:aStream
     ] ifFalse:[
-        1 to:nargs do:[:argIndex |
-            aStream space.
-            (selectorParts at:argIndex) printOn:aStream.
-            aStream space.
-            arg := argArray at:argIndex.
-            needParen := false.
-            arg isMessage ifTrue:[
-                arg isBinaryMessage ifFalse:[
-                    arg isUnaryMessage ifFalse:[
-                        needParen := true
-                    ]
-                ].
-            ].
-            needParen ifTrue:[
-                aStream nextPutAll:'('
-            ].
-            arg printOn:aStream indent:i.
-            needParen ifTrue:[
-                aStream nextPutAll:') '
-            ].
-        ]
+	1 to:nargs do:[:argIndex |
+	    aStream space.
+	    (selectorParts at:argIndex) printOn:aStream.
+	    aStream space.
+	    arg := argArray at:argIndex.
+	    needParen := false.
+	    arg isMessage ifTrue:[
+		arg isBinaryMessage ifFalse:[
+		    arg isUnaryMessage ifFalse:[
+			needParen := true
+		    ]
+		].
+	    ].
+	    needParen ifTrue:[
+		aStream nextPutAll:'('
+	    ].
+	    arg printOn:aStream indent:i.
+	    needParen ifTrue:[
+		aStream nextPutAll:') '
+	    ].
+	]
     ]
 ! !
 
@@ -118,13 +118,13 @@
     |t argValueArray|
 
     receiver isSuper ifTrue:[
-        ^ super evaluate
+	^ super evaluate
     ].
 
     t := receiver evaluateForCascade.
     argArray isNil ifTrue:[
-        t perform:selector.
-        ^ t
+	t perform:selector.
+	^ t
     ].
     argValueArray := argArray collect:[:arg | arg evaluate].
     ^ t perform:selector withArguments:argValueArray
@@ -134,13 +134,13 @@
     |t argValueArray|
 
     receiver isSuper ifTrue:[
-        ^ super evaluateForCascade
+	^ super evaluateForCascade
     ].
 
     t := receiver evaluateForCascade.
     argArray isNil ifTrue:[
-        t perform:selector.
-        ^ t
+	t perform:selector.
+	^ t
     ].
     argValueArray := argArray collect:[:arg | arg evaluate]. 
     t perform:selector withArguments:argValueArray.
--- a/ConstNode.st	Fri Aug 11 18:04:27 1995 +0200
+++ b/ConstNode.st	Fri Aug 11 22:28:40 1995 +0200
@@ -22,7 +22,7 @@
 COPYRIGHT (c) 1989 by Claus Gittinger
 	      All Rights Reserved
 
-$Header: /cvs/stx/stx/libcomp/Attic/ConstNode.st,v 1.14 1995-08-11 16:02:58 claus Exp $
+$Header: /cvs/stx/stx/libcomp/Attic/ConstNode.st,v 1.15 1995-08-11 20:27:54 claus Exp $
 '!
 
 !ConstantNode class methodsFor:'documentation'!
@@ -43,7 +43,7 @@
 
 version
 "
-$Header: /cvs/stx/stx/libcomp/Attic/ConstNode.st,v 1.14 1995-08-11 16:02:58 claus Exp $
+$Header: /cvs/stx/stx/libcomp/Attic/ConstNode.st,v 1.15 1995-08-11 20:27:54 claus Exp $
 "
 !
 
@@ -165,10 +165,10 @@
 
 !ConstantNode methodsFor:'code generation'!
 
-codeOn:aStream inBlock:b
+codeOn:aStream inBlock:b for:aCompiler
     "generated code for the constant"
 
-    |code|
+    |code index|
 
     (type == #Integer) ifTrue:[
 	(value between: -128 and:127) ifTrue:[
@@ -208,10 +208,16 @@
     code notNil ifTrue:[
 	aStream nextPut:code. ^ self
     ].
-    aStream nextPut:#pushLit; nextPut:value
+    index := aCompiler addLiteral:value.
+    index <= 8 ifTrue:[
+	aStream nextPut:(#(pushLit1 pushLit2 pushLit3 pushLit4
+			   pushLit5 pushLit6 pushLit7 pushLit8) at:index).
+    ] ifFalse:[
+	aStream nextPut:#pushLit; nextPut:value
+    ].
 !
 
-codeStoreOn:aStream inBlock:codeBlock valueNeeded:valueNeeded
+codeStoreOn:aStream inBlock:codeBlock valueNeeded:valueNeeded for:aCompiler
     "not sent - parser checks for this"
 
     ^ self error:'assignment to literals not allowed'
--- a/ConstantNode.st	Fri Aug 11 18:04:27 1995 +0200
+++ b/ConstantNode.st	Fri Aug 11 22:28:40 1995 +0200
@@ -22,7 +22,7 @@
 COPYRIGHT (c) 1989 by Claus Gittinger
 	      All Rights Reserved
 
-$Header: /cvs/stx/stx/libcomp/ConstantNode.st,v 1.14 1995-08-11 16:02:58 claus Exp $
+$Header: /cvs/stx/stx/libcomp/ConstantNode.st,v 1.15 1995-08-11 20:27:54 claus Exp $
 '!
 
 !ConstantNode class methodsFor:'documentation'!
@@ -43,7 +43,7 @@
 
 version
 "
-$Header: /cvs/stx/stx/libcomp/ConstantNode.st,v 1.14 1995-08-11 16:02:58 claus Exp $
+$Header: /cvs/stx/stx/libcomp/ConstantNode.st,v 1.15 1995-08-11 20:27:54 claus Exp $
 "
 !
 
@@ -165,10 +165,10 @@
 
 !ConstantNode methodsFor:'code generation'!
 
-codeOn:aStream inBlock:b
+codeOn:aStream inBlock:b for:aCompiler
     "generated code for the constant"
 
-    |code|
+    |code index|
 
     (type == #Integer) ifTrue:[
 	(value between: -128 and:127) ifTrue:[
@@ -208,10 +208,16 @@
     code notNil ifTrue:[
 	aStream nextPut:code. ^ self
     ].
-    aStream nextPut:#pushLit; nextPut:value
+    index := aCompiler addLiteral:value.
+    index <= 8 ifTrue:[
+	aStream nextPut:(#(pushLit1 pushLit2 pushLit3 pushLit4
+			   pushLit5 pushLit6 pushLit7 pushLit8) at:index).
+    ] ifFalse:[
+	aStream nextPut:#pushLit; nextPut:value
+    ].
 !
 
-codeStoreOn:aStream inBlock:codeBlock valueNeeded:valueNeeded
+codeStoreOn:aStream inBlock:codeBlock valueNeeded:valueNeeded for:aCompiler
     "not sent - parser checks for this"
 
     ^ self error:'assignment to literals not allowed'
--- a/MessageNd.st	Fri Aug 11 18:04:27 1995 +0200
+++ b/MessageNd.st	Fri Aug 11 22:28:40 1995 +0200
@@ -21,7 +21,7 @@
 COPYRIGHT (c) 1989 by Claus Gittinger
 	      All Rights Reserved
 
-$Header: /cvs/stx/stx/libcomp/Attic/MessageNd.st,v 1.26 1995-08-11 16:03:13 claus Exp $
+$Header: /cvs/stx/stx/libcomp/Attic/MessageNd.st,v 1.27 1995-08-11 20:28:01 claus Exp $
 '!
 
 !MessageNode class methodsFor:'documentation'!
@@ -42,7 +42,7 @@
 
 version
 "
-$Header: /cvs/stx/stx/libcomp/Attic/MessageNd.st,v 1.26 1995-08-11 16:03:13 claus Exp $
+$Header: /cvs/stx/stx/libcomp/Attic/MessageNd.st,v 1.27 1995-08-11 20:28:01 claus Exp $
 "
 !
 
@@ -567,12 +567,12 @@
 
 !MessageNode methodsFor:'code generation'!
 
-codeForSideEffectOn:aStream inBlock:b
-    self codeOn:aStream inBlock:b valueNeeded:false
+codeForSideEffectOn:aStream inBlock:b for:aCompiler
+    self codeOn:aStream inBlock:b valueNeeded:false for:aCompiler
 !
 
-codeOn:aStream inBlock:b
-    self codeOn:aStream inBlock:b valueNeeded:true
+codeOn:aStream inBlock:b for:aCompiler
+    self codeOn:aStream inBlock:b valueNeeded:true for:aCompiler
 !
 
 optimizedConditionFor:aReceiver with:aByteCode
@@ -655,7 +655,7 @@
     ^ nil
 !
 
-codeWhileOn:aStream inBlock:b valueNeeded:valueNeeded
+codeWhileOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler
     "generate code for [...] whilexxx:[ ... ]"
 
     |pos pos2 theReceiver theArg theByteCode optByteCode|
@@ -679,12 +679,12 @@
     valueNeeded ifTrue:[aStream nextPut:#pushNil].
     pos := aStream position.
     optByteCode notNil ifTrue:[
-	theReceiver codeOn:aStream inBlock:b.
+	theReceiver codeOn:aStream inBlock:b for:aCompiler.
 	theArg notNil ifTrue:[
-	    theArg codeOn:aStream inBlock:b
+	    theArg codeOn:aStream inBlock:b for:aCompiler
 	]
     ] ifFalse:[
-	theReceiver codeInlineOn:aStream inBlock:b
+	theReceiver codeInlineOn:aStream inBlock:b for:aCompiler
     ].
 
     (lineNr between:1 and:255) ifTrue:[
@@ -695,18 +695,18 @@
     pos2 := aStream position.
     aStream nextPut:0.
     valueNeeded ifTrue:[aStream nextPut:#drop].
-    (argArray at:1) codeInlineOn:aStream inBlock:b valueNeeded:valueNeeded.
+    (argArray at:1) codeInlineOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
     aStream nextPut:#jump; nextPut:pos.
     (aStream contents) at:pos2 put:(aStream position)
 !
 
-codeTimesRepeatOn:aStream inBlock:b valueNeeded:valueNeeded
+codeTimesRepeatOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler
     "generate code for n timesRepeat:[ ... ]"
 
     |pos pos2 theReceiver|
 
     theReceiver := receiver.
-    theReceiver codeOn:aStream inBlock:b.
+    theReceiver codeOn:aStream inBlock:b for:aCompiler.
     valueNeeded ifTrue:[aStream nextPut:#dup].
 
     pos := aStream position.
@@ -715,14 +715,14 @@
     pos2 := aStream position.
     aStream nextPut:0.
 
-    (argArray at:1) codeInlineOn:aStream inBlock:b valueNeeded:false.
+    (argArray at:1) codeInlineOn:aStream inBlock:b valueNeeded:false for:aCompiler.
     aStream nextPut:#minus1; nextPut:lineNr; nextPut:#jump; nextPut:pos.
 
     (aStream contents) at:pos2 put:(aStream position).
     aStream nextPut:#drop.
 !
 
-codeIfElseOn:aStream inBlock:b valueNeeded:valueNeeded
+codeIfElseOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler
     "generate code for x ifxxx:[ ... ] yyy:[ ...]"
 
     |pos pos2 theReceiver theArg theByteCode optByteCode subsel code|
@@ -733,11 +733,11 @@
     (theReceiver isMessage) ifTrue:[
 	subsel := theReceiver selector.
 	(subsel == #and:) ifTrue:[
-	    self codeAndIfElseOn:aStream inBlock:b valueNeeded:valueNeeded.
+	    self codeAndIfElseOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
 	    ^ self
 	].
 	(subsel == #or:) ifTrue:[
-	    self codeOrIfElseOn:aStream inBlock:b valueNeeded:valueNeeded.
+	    self codeOrIfElseOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
 	    ^ self
 	]
     ].
@@ -759,9 +759,9 @@
 	theByteCode := optByteCode
     ].
     theByteCode notNil ifTrue:[
-	theReceiver codeOn:aStream inBlock:b.
+	theReceiver codeOn:aStream inBlock:b for:aCompiler.
 	theArg notNil ifTrue:[
-	    theArg codeOn:aStream inBlock:b
+	    theArg codeOn:aStream inBlock:b for:aCompiler
 	].
 
 	(lineNr between:1 and:255) ifTrue:[
@@ -771,18 +771,18 @@
 	aStream nextPut:theByteCode.
 	pos := aStream position.
 	aStream nextPut:0.
-	(argArray at:1) codeInlineOn:aStream inBlock:b valueNeeded:valueNeeded.
+	(argArray at:1) codeInlineOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
 	aStream nextPut:#jump.
 	pos2 := aStream position.
 	aStream nextPut:0.
 	code := aStream contents.
 	code at:pos put:(aStream position).
-	(argArray at:2) codeInlineOn:aStream inBlock:b valueNeeded:valueNeeded.
+	(argArray at:2) codeInlineOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
 	code at:pos2 put:(aStream position)
     ]
 !
 
-codeIfOn:aStream inBlock:b valueNeeded:valueNeeded
+codeIfOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler
     "generate code for x ifxxx:[ ... ]"
 
     |pos pos2 theReceiver theArg theByteCode optByteCode subsel code
@@ -793,11 +793,11 @@
     (theReceiver isMessage) ifTrue:[
 	subsel := theReceiver selector.
 	(subsel == #and:) ifTrue:[
-	    self codeAndIfOn:aStream inBlock:b valueNeeded:valueNeeded.
+	    self codeAndIfOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
 	    ^ self
 	].
 	(subsel == #or:) ifTrue:[
-	    self codeOrIfOn:aStream inBlock:b valueNeeded:valueNeeded.
+	    self codeOrIfOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
 	    ^ self
 	]
     ].
@@ -816,9 +816,9 @@
 	theByteCode := optByteCode
     ].
 
-    theReceiver codeOn:aStream inBlock:b.
+    theReceiver codeOn:aStream inBlock:b for:aCompiler.
     theArg notNil ifTrue:[
-	theArg codeOn:aStream inBlock:b
+	theArg codeOn:aStream inBlock:b for:aCompiler
     ].
 
     needLineNr := true.
@@ -841,7 +841,7 @@
     aStream nextPut:theByteCode.
     pos := aStream position.
     aStream nextPut:0.
-    (argArray at: 1) codeInlineOn:aStream inBlock:b valueNeeded:valueNeeded.
+    (argArray at: 1) codeInlineOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
 
     code := aStream contents.
     valueNeeded ifTrue:[
@@ -856,7 +856,7 @@
     ]
 !
 
-codeAndIfOn:aStream inBlock:b valueNeeded:valueNeeded
+codeAndIfOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler
     "generate code for (x and:[y]) ifxxx:[ ... ]"
 
     |theByteCode optByteCode theReceiver theArg pos1 pos2 pos3 code here jmp|
@@ -874,16 +874,16 @@
 	theReceiver := theReceiver receiver.
 	theByteCode := optByteCode
     ].
-    theReceiver codeOn:aStream inBlock:b.
+    theReceiver codeOn:aStream inBlock:b for:aCompiler.
     theArg notNil ifTrue:[
-	theArg codeOn:aStream inBlock:b
+	theArg codeOn:aStream inBlock:b for:aCompiler
     ].
     aStream nextPut:theByteCode.
     pos1 := aStream position.
     aStream nextPut:0.
 
     theReceiver := receiver arg1.
-    theReceiver codeInlineOn:aStream inBlock:b.
+    theReceiver codeInlineOn:aStream inBlock:b for:aCompiler.
     (selector == #ifTrue:) ifTrue:[
 	jmp := #falseJump
     ] ifFalse:[
@@ -897,7 +897,7 @@
     (selector == #ifFalse:) ifTrue:[
 	code at:pos1 put:(aStream position)
     ].
-    (argArray at: 1) codeInlineOn:aStream inBlock:b valueNeeded:valueNeeded.
+    (argArray at: 1) codeInlineOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
 
     valueNeeded ifTrue:[
 	aStream nextPut:#jump.
@@ -919,7 +919,7 @@
     ]
 !
 
-codeOrIfOn:aStream inBlock:b valueNeeded:valueNeeded
+codeOrIfOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler
     "generate code for (x or:[y]) ifxxx:[ ... ]"
 
     |theByteCode optByteCode theReceiver theArg pos1 pos2 pos3 code here jmp|
@@ -935,9 +935,9 @@
 	theReceiver := theReceiver receiver.
 	theByteCode := optByteCode
     ].
-    theReceiver codeOn:aStream inBlock:b.
+    theReceiver codeOn:aStream inBlock:b for:aCompiler.
     theArg notNil ifTrue:[
-	theArg codeOn:aStream inBlock:b
+	theArg codeOn:aStream inBlock:b for:aCompiler
     ].
     aStream nextPut:theByteCode.
     pos1 := aStream position.
@@ -963,15 +963,15 @@
 	theReceiver := theReceiver receiver.
 	theByteCode := optByteCode.
 
-	theReceiver codeOn:aStream inBlock:b.
+	theReceiver codeOn:aStream inBlock:b for:aCompiler.
 	theArg notNil ifTrue:[
-	    theArg codeOn:aStream inBlock:b
+	    theArg codeOn:aStream inBlock:b for:aCompiler
 	].
 	aStream nextPut:theByteCode.
 
     ] ifFalse:[
 "org"
-	theReceiver codeInlineOn:aStream inBlock:b.
+	theReceiver codeInlineOn:aStream inBlock:b for:aCompiler.
 	(selector == #ifTrue:) ifTrue:[
 	    jmp := #falseJump
 	] ifFalse:[
@@ -984,7 +984,7 @@
     (selector == #ifTrue:) ifTrue:[
 	(aStream contents) at:pos1 put:(aStream position)
     ].
-    (argArray at: 1) codeInlineOn:aStream inBlock:b valueNeeded:valueNeeded.
+    (argArray at: 1) codeInlineOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
 
     code := aStream contents.
     valueNeeded ifTrue:[
@@ -1007,7 +1007,7 @@
     ]
 !
 
-codeAndOrOn:aStream inBlock:b valueNeeded:valueNeeded
+codeAndOrOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler
     "generate code for x and/or:[y] - but not in an if"
 
     |pos theReceiver theByteCode|
@@ -1026,16 +1026,16 @@
 	theReceiver := theReceiver receiver
     ].
 "
-    theReceiver codeOn:aStream inBlock:b.
+    theReceiver codeOn:aStream inBlock:b for:aCompiler.
     aStream nextPut:theByteCode.
     pos := aStream position.
     aStream nextPut:0.
-    (argArray at: 1) codeInlineOn:aStream inBlock:b.
+    (argArray at: 1) codeInlineOn:aStream inBlock:b for:aCompiler.
     (aStream contents) at:pos put:(aStream position).
     valueNeeded ifFalse:[aStream nextPut:#drop]
 !
 
-codeOn:aStream inBlock:b valueNeeded:valueNeeded
+codeOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler
     |nargs isBuiltIn code|
 
     argArray isNil ifTrue:[
@@ -1065,7 +1065,7 @@
 
 	receiver isBlock ifTrue:[
 	    selector == #value ifTrue:[
-		receiver codeInlineOn:aStream inBlock:b valueNeeded:valueNeeded.
+		receiver codeInlineOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
 		^ self
 	    ].
 	].
@@ -1076,7 +1076,7 @@
 	(receiver type == #ThisContext) ifTrue:[
 	    valueNeeded ifFalse:[
 		(selector == #return:) ifTrue:[
-		    (argArray at:1) codeOn:aStream inBlock:b.  "^ value"
+		    (argArray at:1) codeOn:aStream inBlock:b for:aCompiler.  "^ value"
 		    aStream nextPut:#retTop.
 		    ^ self
 		].
@@ -1086,26 +1086,26 @@
 	((argArray at:1) isBlock) ifTrue:[
 	    ((selector == #ifTrue:) or:[selector == #ifFalse:]) ifTrue:[
 		receiver isBlock ifFalse:[
-		    self codeIfOn:aStream inBlock:b valueNeeded:valueNeeded.
+		    self codeIfOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
 		    ^ self
 		].
 	    ].
 "
 	    ((selector == #and:) or:[selector == #or:]) ifTrue:[
-		self codeAndOrOn:aStream inBlock:b valueNeeded:valueNeeded.
+		self codeAndOrOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
 		^ self
 	    ].
 "
 	    (selector == #timesRepeat:) ifTrue:[
 		(receiver isConstant and:[receiver evaluate isNumber]) ifTrue:[
-		    self codeTimesRepeatOn:aStream inBlock:b valueNeeded:valueNeeded.
+		    self codeTimesRepeatOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
 		    ^ self
 		]
 	    ].
 
 	    ((selector == #whileTrue:) or:[selector == #whileFalse:]) ifTrue:[
 		(receiver isBlock) ifTrue:[
-		    self codeWhileOn:aStream inBlock:b valueNeeded:valueNeeded.
+		    self codeWhileOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
 		    ^ self
 		]
 	    ]
@@ -1118,7 +1118,7 @@
 	    receiver isBlock ifFalse:[
 		(argArray at:1) isBlock ifTrue:[
 		    (argArray at:2) isBlock ifTrue:[
-			self codeIfElseOn:aStream inBlock:b valueNeeded:valueNeeded.
+			self codeIfElseOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
 			^ self
 		    ]
 		]
@@ -1130,11 +1130,11 @@
     "can we use a send-bytecode ?"
     isBuiltIn ifTrue:[
 	receiver isSuper ifFalse:[
-	    receiver codeOn:aStream inBlock:b.
+	    receiver codeOn:aStream inBlock:b for:aCompiler.
 	    (nargs > 0) ifTrue:[
-		(argArray at:1) codeOn:aStream inBlock:b.
+		(argArray at:1) codeOn:aStream inBlock:b for:aCompiler.
 		(nargs > 1) ifTrue:[
-		    (argArray at:2) codeOn:aStream inBlock:b
+		    (argArray at:2) codeOn:aStream inBlock:b for:aCompiler
 		]
 	    ].
 	    aStream nextPut:selector.
@@ -1153,7 +1153,7 @@
 	 we get it without the yourself-message"
 
 	valueNeeded ifTrue:[
-	    receiver codeOn:aStream inBlock:b
+	    receiver codeOn:aStream inBlock:b for:aCompiler
 	].
 	^ self
     ].
@@ -1161,11 +1161,11 @@
     "no - generate a send"
     ((receiver type ~~ #Self)
     or:[nargs > 3]) ifTrue:[
-	receiver codeOn:aStream inBlock:b
+	receiver codeOn:aStream inBlock:b for:aCompiler
     ].
     argArray notNil ifTrue:[
 	argArray do:[:arg |
-	    arg codeOn:aStream inBlock:b
+	    arg codeOn:aStream inBlock:b for:aCompiler
 	]
     ].
     receiver isSuper ifTrue:[
@@ -1209,7 +1209,7 @@
     aStream nextPut:code; nextPut:lineNr; nextPut:selector; nextPut:nargs
 !
 
-codeSendOn:aStream inBlock:b valueNeeded:valueNeeded
+codeSendOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler
     "like code on, but assumes that receiver has already been
      coded onto stack - needed for cascade"
 
@@ -1237,9 +1237,9 @@
     isBuiltIn ifTrue:[
 	receiver isSuper ifFalse:[
 	    (nargs > 0) ifTrue:[
-		(argArray at:1) codeOn:aStream inBlock:b.
+		(argArray at:1) codeOn:aStream inBlock:b for:aCompiler.
 		(nargs > 1) ifTrue:[
-		    (argArray at:2) codeOn:aStream inBlock:b
+		    (argArray at:2) codeOn:aStream inBlock:b for:aCompiler
 		]
 	    ].
 	    aStream nextPut:selector.
@@ -1255,7 +1255,7 @@
 
     argArray notNil ifTrue:[
 	argArray do:[:arg |
-	    arg codeOn:aStream inBlock:b
+	    arg codeOn:aStream inBlock:b for:aCompiler
 	]
     ].
 
@@ -1301,7 +1301,7 @@
     aStream nextPut:code; nextPut:lineNr; nextPut:selector; nextPut:nargs
 !
 
-codeForCascadeOn:aStream inBlock:b
+codeForCascadeOn:aStream inBlock:b for:aCompiler
     "like codeOn, but always leave the receiver instead of the result"
 
     |nargs isBuiltIn code|
@@ -1324,16 +1324,16 @@
 	isBuiltIn := self class isBuiltIn2ArgSelector:selector
     ].
 
-    receiver codeOn:aStream inBlock:b.
+    receiver codeOn:aStream inBlock:b for:aCompiler.
     aStream nextPut:#dup.
 
     "can we use a send-bytecode ?"
     isBuiltIn ifTrue:[
 	receiver isSuper ifFalse:[
 	    (nargs > 0) ifTrue:[
-		(argArray at:1) codeOn:aStream inBlock:b.
+		(argArray at:1) codeOn:aStream inBlock:b for:aCompiler.
 		(nargs > 1) ifTrue:[
-		    (argArray at:2) codeOn:aStream inBlock:b
+		    (argArray at:2) codeOn:aStream inBlock:b for:aCompiler
 		]
 	    ].
 	    aStream nextPut:selector; nextPut:lineNr; nextPut:#drop.
@@ -1344,7 +1344,7 @@
     "no - generate a send"
     argArray notNil ifTrue:[
 	argArray do:[:arg |
-	    arg codeOn:aStream inBlock:b
+	    arg codeOn:aStream inBlock:b for:aCompiler
 	]
     ].
     receiver isSuper ifTrue:[
--- a/MessageNode.st	Fri Aug 11 18:04:27 1995 +0200
+++ b/MessageNode.st	Fri Aug 11 22:28:40 1995 +0200
@@ -21,7 +21,7 @@
 COPYRIGHT (c) 1989 by Claus Gittinger
 	      All Rights Reserved
 
-$Header: /cvs/stx/stx/libcomp/MessageNode.st,v 1.26 1995-08-11 16:03:13 claus Exp $
+$Header: /cvs/stx/stx/libcomp/MessageNode.st,v 1.27 1995-08-11 20:28:01 claus Exp $
 '!
 
 !MessageNode class methodsFor:'documentation'!
@@ -42,7 +42,7 @@
 
 version
 "
-$Header: /cvs/stx/stx/libcomp/MessageNode.st,v 1.26 1995-08-11 16:03:13 claus Exp $
+$Header: /cvs/stx/stx/libcomp/MessageNode.st,v 1.27 1995-08-11 20:28:01 claus Exp $
 "
 !
 
@@ -567,12 +567,12 @@
 
 !MessageNode methodsFor:'code generation'!
 
-codeForSideEffectOn:aStream inBlock:b
-    self codeOn:aStream inBlock:b valueNeeded:false
+codeForSideEffectOn:aStream inBlock:b for:aCompiler
+    self codeOn:aStream inBlock:b valueNeeded:false for:aCompiler
 !
 
-codeOn:aStream inBlock:b
-    self codeOn:aStream inBlock:b valueNeeded:true
+codeOn:aStream inBlock:b for:aCompiler
+    self codeOn:aStream inBlock:b valueNeeded:true for:aCompiler
 !
 
 optimizedConditionFor:aReceiver with:aByteCode
@@ -655,7 +655,7 @@
     ^ nil
 !
 
-codeWhileOn:aStream inBlock:b valueNeeded:valueNeeded
+codeWhileOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler
     "generate code for [...] whilexxx:[ ... ]"
 
     |pos pos2 theReceiver theArg theByteCode optByteCode|
@@ -679,12 +679,12 @@
     valueNeeded ifTrue:[aStream nextPut:#pushNil].
     pos := aStream position.
     optByteCode notNil ifTrue:[
-	theReceiver codeOn:aStream inBlock:b.
+	theReceiver codeOn:aStream inBlock:b for:aCompiler.
 	theArg notNil ifTrue:[
-	    theArg codeOn:aStream inBlock:b
+	    theArg codeOn:aStream inBlock:b for:aCompiler
 	]
     ] ifFalse:[
-	theReceiver codeInlineOn:aStream inBlock:b
+	theReceiver codeInlineOn:aStream inBlock:b for:aCompiler
     ].
 
     (lineNr between:1 and:255) ifTrue:[
@@ -695,18 +695,18 @@
     pos2 := aStream position.
     aStream nextPut:0.
     valueNeeded ifTrue:[aStream nextPut:#drop].
-    (argArray at:1) codeInlineOn:aStream inBlock:b valueNeeded:valueNeeded.
+    (argArray at:1) codeInlineOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
     aStream nextPut:#jump; nextPut:pos.
     (aStream contents) at:pos2 put:(aStream position)
 !
 
-codeTimesRepeatOn:aStream inBlock:b valueNeeded:valueNeeded
+codeTimesRepeatOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler
     "generate code for n timesRepeat:[ ... ]"
 
     |pos pos2 theReceiver|
 
     theReceiver := receiver.
-    theReceiver codeOn:aStream inBlock:b.
+    theReceiver codeOn:aStream inBlock:b for:aCompiler.
     valueNeeded ifTrue:[aStream nextPut:#dup].
 
     pos := aStream position.
@@ -715,14 +715,14 @@
     pos2 := aStream position.
     aStream nextPut:0.
 
-    (argArray at:1) codeInlineOn:aStream inBlock:b valueNeeded:false.
+    (argArray at:1) codeInlineOn:aStream inBlock:b valueNeeded:false for:aCompiler.
     aStream nextPut:#minus1; nextPut:lineNr; nextPut:#jump; nextPut:pos.
 
     (aStream contents) at:pos2 put:(aStream position).
     aStream nextPut:#drop.
 !
 
-codeIfElseOn:aStream inBlock:b valueNeeded:valueNeeded
+codeIfElseOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler
     "generate code for x ifxxx:[ ... ] yyy:[ ...]"
 
     |pos pos2 theReceiver theArg theByteCode optByteCode subsel code|
@@ -733,11 +733,11 @@
     (theReceiver isMessage) ifTrue:[
 	subsel := theReceiver selector.
 	(subsel == #and:) ifTrue:[
-	    self codeAndIfElseOn:aStream inBlock:b valueNeeded:valueNeeded.
+	    self codeAndIfElseOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
 	    ^ self
 	].
 	(subsel == #or:) ifTrue:[
-	    self codeOrIfElseOn:aStream inBlock:b valueNeeded:valueNeeded.
+	    self codeOrIfElseOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
 	    ^ self
 	]
     ].
@@ -759,9 +759,9 @@
 	theByteCode := optByteCode
     ].
     theByteCode notNil ifTrue:[
-	theReceiver codeOn:aStream inBlock:b.
+	theReceiver codeOn:aStream inBlock:b for:aCompiler.
 	theArg notNil ifTrue:[
-	    theArg codeOn:aStream inBlock:b
+	    theArg codeOn:aStream inBlock:b for:aCompiler
 	].
 
 	(lineNr between:1 and:255) ifTrue:[
@@ -771,18 +771,18 @@
 	aStream nextPut:theByteCode.
 	pos := aStream position.
 	aStream nextPut:0.
-	(argArray at:1) codeInlineOn:aStream inBlock:b valueNeeded:valueNeeded.
+	(argArray at:1) codeInlineOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
 	aStream nextPut:#jump.
 	pos2 := aStream position.
 	aStream nextPut:0.
 	code := aStream contents.
 	code at:pos put:(aStream position).
-	(argArray at:2) codeInlineOn:aStream inBlock:b valueNeeded:valueNeeded.
+	(argArray at:2) codeInlineOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
 	code at:pos2 put:(aStream position)
     ]
 !
 
-codeIfOn:aStream inBlock:b valueNeeded:valueNeeded
+codeIfOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler
     "generate code for x ifxxx:[ ... ]"
 
     |pos pos2 theReceiver theArg theByteCode optByteCode subsel code
@@ -793,11 +793,11 @@
     (theReceiver isMessage) ifTrue:[
 	subsel := theReceiver selector.
 	(subsel == #and:) ifTrue:[
-	    self codeAndIfOn:aStream inBlock:b valueNeeded:valueNeeded.
+	    self codeAndIfOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
 	    ^ self
 	].
 	(subsel == #or:) ifTrue:[
-	    self codeOrIfOn:aStream inBlock:b valueNeeded:valueNeeded.
+	    self codeOrIfOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
 	    ^ self
 	]
     ].
@@ -816,9 +816,9 @@
 	theByteCode := optByteCode
     ].
 
-    theReceiver codeOn:aStream inBlock:b.
+    theReceiver codeOn:aStream inBlock:b for:aCompiler.
     theArg notNil ifTrue:[
-	theArg codeOn:aStream inBlock:b
+	theArg codeOn:aStream inBlock:b for:aCompiler
     ].
 
     needLineNr := true.
@@ -841,7 +841,7 @@
     aStream nextPut:theByteCode.
     pos := aStream position.
     aStream nextPut:0.
-    (argArray at: 1) codeInlineOn:aStream inBlock:b valueNeeded:valueNeeded.
+    (argArray at: 1) codeInlineOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
 
     code := aStream contents.
     valueNeeded ifTrue:[
@@ -856,7 +856,7 @@
     ]
 !
 
-codeAndIfOn:aStream inBlock:b valueNeeded:valueNeeded
+codeAndIfOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler
     "generate code for (x and:[y]) ifxxx:[ ... ]"
 
     |theByteCode optByteCode theReceiver theArg pos1 pos2 pos3 code here jmp|
@@ -874,16 +874,16 @@
 	theReceiver := theReceiver receiver.
 	theByteCode := optByteCode
     ].
-    theReceiver codeOn:aStream inBlock:b.
+    theReceiver codeOn:aStream inBlock:b for:aCompiler.
     theArg notNil ifTrue:[
-	theArg codeOn:aStream inBlock:b
+	theArg codeOn:aStream inBlock:b for:aCompiler
     ].
     aStream nextPut:theByteCode.
     pos1 := aStream position.
     aStream nextPut:0.
 
     theReceiver := receiver arg1.
-    theReceiver codeInlineOn:aStream inBlock:b.
+    theReceiver codeInlineOn:aStream inBlock:b for:aCompiler.
     (selector == #ifTrue:) ifTrue:[
 	jmp := #falseJump
     ] ifFalse:[
@@ -897,7 +897,7 @@
     (selector == #ifFalse:) ifTrue:[
 	code at:pos1 put:(aStream position)
     ].
-    (argArray at: 1) codeInlineOn:aStream inBlock:b valueNeeded:valueNeeded.
+    (argArray at: 1) codeInlineOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
 
     valueNeeded ifTrue:[
 	aStream nextPut:#jump.
@@ -919,7 +919,7 @@
     ]
 !
 
-codeOrIfOn:aStream inBlock:b valueNeeded:valueNeeded
+codeOrIfOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler
     "generate code for (x or:[y]) ifxxx:[ ... ]"
 
     |theByteCode optByteCode theReceiver theArg pos1 pos2 pos3 code here jmp|
@@ -935,9 +935,9 @@
 	theReceiver := theReceiver receiver.
 	theByteCode := optByteCode
     ].
-    theReceiver codeOn:aStream inBlock:b.
+    theReceiver codeOn:aStream inBlock:b for:aCompiler.
     theArg notNil ifTrue:[
-	theArg codeOn:aStream inBlock:b
+	theArg codeOn:aStream inBlock:b for:aCompiler
     ].
     aStream nextPut:theByteCode.
     pos1 := aStream position.
@@ -963,15 +963,15 @@
 	theReceiver := theReceiver receiver.
 	theByteCode := optByteCode.
 
-	theReceiver codeOn:aStream inBlock:b.
+	theReceiver codeOn:aStream inBlock:b for:aCompiler.
 	theArg notNil ifTrue:[
-	    theArg codeOn:aStream inBlock:b
+	    theArg codeOn:aStream inBlock:b for:aCompiler
 	].
 	aStream nextPut:theByteCode.
 
     ] ifFalse:[
 "org"
-	theReceiver codeInlineOn:aStream inBlock:b.
+	theReceiver codeInlineOn:aStream inBlock:b for:aCompiler.
 	(selector == #ifTrue:) ifTrue:[
 	    jmp := #falseJump
 	] ifFalse:[
@@ -984,7 +984,7 @@
     (selector == #ifTrue:) ifTrue:[
 	(aStream contents) at:pos1 put:(aStream position)
     ].
-    (argArray at: 1) codeInlineOn:aStream inBlock:b valueNeeded:valueNeeded.
+    (argArray at: 1) codeInlineOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
 
     code := aStream contents.
     valueNeeded ifTrue:[
@@ -1007,7 +1007,7 @@
     ]
 !
 
-codeAndOrOn:aStream inBlock:b valueNeeded:valueNeeded
+codeAndOrOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler
     "generate code for x and/or:[y] - but not in an if"
 
     |pos theReceiver theByteCode|
@@ -1026,16 +1026,16 @@
 	theReceiver := theReceiver receiver
     ].
 "
-    theReceiver codeOn:aStream inBlock:b.
+    theReceiver codeOn:aStream inBlock:b for:aCompiler.
     aStream nextPut:theByteCode.
     pos := aStream position.
     aStream nextPut:0.
-    (argArray at: 1) codeInlineOn:aStream inBlock:b.
+    (argArray at: 1) codeInlineOn:aStream inBlock:b for:aCompiler.
     (aStream contents) at:pos put:(aStream position).
     valueNeeded ifFalse:[aStream nextPut:#drop]
 !
 
-codeOn:aStream inBlock:b valueNeeded:valueNeeded
+codeOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler
     |nargs isBuiltIn code|
 
     argArray isNil ifTrue:[
@@ -1065,7 +1065,7 @@
 
 	receiver isBlock ifTrue:[
 	    selector == #value ifTrue:[
-		receiver codeInlineOn:aStream inBlock:b valueNeeded:valueNeeded.
+		receiver codeInlineOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
 		^ self
 	    ].
 	].
@@ -1076,7 +1076,7 @@
 	(receiver type == #ThisContext) ifTrue:[
 	    valueNeeded ifFalse:[
 		(selector == #return:) ifTrue:[
-		    (argArray at:1) codeOn:aStream inBlock:b.  "^ value"
+		    (argArray at:1) codeOn:aStream inBlock:b for:aCompiler.  "^ value"
 		    aStream nextPut:#retTop.
 		    ^ self
 		].
@@ -1086,26 +1086,26 @@
 	((argArray at:1) isBlock) ifTrue:[
 	    ((selector == #ifTrue:) or:[selector == #ifFalse:]) ifTrue:[
 		receiver isBlock ifFalse:[
-		    self codeIfOn:aStream inBlock:b valueNeeded:valueNeeded.
+		    self codeIfOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
 		    ^ self
 		].
 	    ].
 "
 	    ((selector == #and:) or:[selector == #or:]) ifTrue:[
-		self codeAndOrOn:aStream inBlock:b valueNeeded:valueNeeded.
+		self codeAndOrOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
 		^ self
 	    ].
 "
 	    (selector == #timesRepeat:) ifTrue:[
 		(receiver isConstant and:[receiver evaluate isNumber]) ifTrue:[
-		    self codeTimesRepeatOn:aStream inBlock:b valueNeeded:valueNeeded.
+		    self codeTimesRepeatOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
 		    ^ self
 		]
 	    ].
 
 	    ((selector == #whileTrue:) or:[selector == #whileFalse:]) ifTrue:[
 		(receiver isBlock) ifTrue:[
-		    self codeWhileOn:aStream inBlock:b valueNeeded:valueNeeded.
+		    self codeWhileOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
 		    ^ self
 		]
 	    ]
@@ -1118,7 +1118,7 @@
 	    receiver isBlock ifFalse:[
 		(argArray at:1) isBlock ifTrue:[
 		    (argArray at:2) isBlock ifTrue:[
-			self codeIfElseOn:aStream inBlock:b valueNeeded:valueNeeded.
+			self codeIfElseOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler.
 			^ self
 		    ]
 		]
@@ -1130,11 +1130,11 @@
     "can we use a send-bytecode ?"
     isBuiltIn ifTrue:[
 	receiver isSuper ifFalse:[
-	    receiver codeOn:aStream inBlock:b.
+	    receiver codeOn:aStream inBlock:b for:aCompiler.
 	    (nargs > 0) ifTrue:[
-		(argArray at:1) codeOn:aStream inBlock:b.
+		(argArray at:1) codeOn:aStream inBlock:b for:aCompiler.
 		(nargs > 1) ifTrue:[
-		    (argArray at:2) codeOn:aStream inBlock:b
+		    (argArray at:2) codeOn:aStream inBlock:b for:aCompiler
 		]
 	    ].
 	    aStream nextPut:selector.
@@ -1153,7 +1153,7 @@
 	 we get it without the yourself-message"
 
 	valueNeeded ifTrue:[
-	    receiver codeOn:aStream inBlock:b
+	    receiver codeOn:aStream inBlock:b for:aCompiler
 	].
 	^ self
     ].
@@ -1161,11 +1161,11 @@
     "no - generate a send"
     ((receiver type ~~ #Self)
     or:[nargs > 3]) ifTrue:[
-	receiver codeOn:aStream inBlock:b
+	receiver codeOn:aStream inBlock:b for:aCompiler
     ].
     argArray notNil ifTrue:[
 	argArray do:[:arg |
-	    arg codeOn:aStream inBlock:b
+	    arg codeOn:aStream inBlock:b for:aCompiler
 	]
     ].
     receiver isSuper ifTrue:[
@@ -1209,7 +1209,7 @@
     aStream nextPut:code; nextPut:lineNr; nextPut:selector; nextPut:nargs
 !
 
-codeSendOn:aStream inBlock:b valueNeeded:valueNeeded
+codeSendOn:aStream inBlock:b valueNeeded:valueNeeded for:aCompiler
     "like code on, but assumes that receiver has already been
      coded onto stack - needed for cascade"
 
@@ -1237,9 +1237,9 @@
     isBuiltIn ifTrue:[
 	receiver isSuper ifFalse:[
 	    (nargs > 0) ifTrue:[
-		(argArray at:1) codeOn:aStream inBlock:b.
+		(argArray at:1) codeOn:aStream inBlock:b for:aCompiler.
 		(nargs > 1) ifTrue:[
-		    (argArray at:2) codeOn:aStream inBlock:b
+		    (argArray at:2) codeOn:aStream inBlock:b for:aCompiler
 		]
 	    ].
 	    aStream nextPut:selector.
@@ -1255,7 +1255,7 @@
 
     argArray notNil ifTrue:[
 	argArray do:[:arg |
-	    arg codeOn:aStream inBlock:b
+	    arg codeOn:aStream inBlock:b for:aCompiler
 	]
     ].
 
@@ -1301,7 +1301,7 @@
     aStream nextPut:code; nextPut:lineNr; nextPut:selector; nextPut:nargs
 !
 
-codeForCascadeOn:aStream inBlock:b
+codeForCascadeOn:aStream inBlock:b for:aCompiler
     "like codeOn, but always leave the receiver instead of the result"
 
     |nargs isBuiltIn code|
@@ -1324,16 +1324,16 @@
 	isBuiltIn := self class isBuiltIn2ArgSelector:selector
     ].
 
-    receiver codeOn:aStream inBlock:b.
+    receiver codeOn:aStream inBlock:b for:aCompiler.
     aStream nextPut:#dup.
 
     "can we use a send-bytecode ?"
     isBuiltIn ifTrue:[
 	receiver isSuper ifFalse:[
 	    (nargs > 0) ifTrue:[
-		(argArray at:1) codeOn:aStream inBlock:b.
+		(argArray at:1) codeOn:aStream inBlock:b for:aCompiler.
 		(nargs > 1) ifTrue:[
-		    (argArray at:2) codeOn:aStream inBlock:b
+		    (argArray at:2) codeOn:aStream inBlock:b for:aCompiler
 		]
 	    ].
 	    aStream nextPut:selector; nextPut:lineNr; nextPut:#drop.
@@ -1344,7 +1344,7 @@
     "no - generate a send"
     argArray notNil ifTrue:[
 	argArray do:[:arg |
-	    arg codeOn:aStream inBlock:b
+	    arg codeOn:aStream inBlock:b for:aCompiler
 	]
     ].
     receiver isSuper ifTrue:[
--- a/ParseNode.st	Fri Aug 11 18:04:27 1995 +0200
+++ b/ParseNode.st	Fri Aug 11 22:28:40 1995 +0200
@@ -21,7 +21,7 @@
 COPYRIGHT (c) 1989 by Claus Gittinger
 	      All Rights Reserved
 
-$Header: /cvs/stx/stx/libcomp/ParseNode.st,v 1.11 1995-08-11 16:03:30 claus Exp $
+$Header: /cvs/stx/stx/libcomp/ParseNode.st,v 1.12 1995-08-11 20:28:09 claus Exp $
 '!
 
 !ParseNode class methodsFor:'documentation'!
@@ -42,7 +42,7 @@
 
 version
 "
-$Header: /cvs/stx/stx/libcomp/ParseNode.st,v 1.11 1995-08-11 16:03:30 claus Exp $
+$Header: /cvs/stx/stx/libcomp/ParseNode.st,v 1.12 1995-08-11 20:28:09 claus Exp $
 "
 !
 
@@ -178,9 +178,9 @@
 
 !ParseNode methodsFor:'code generation'!
 
-codeForSideEffectOn:aStream inBlock:b
+codeForSideEffectOn:aStream inBlock:b for:aCompiler
     "generate code for this statement - value not needed"
 
-    self codeOn:aStream inBlock:b.
+    self codeOn:aStream inBlock:b for:aCompiler.
     aStream nextPut:#drop
 ! !
--- a/PrimNd.st	Fri Aug 11 18:04:27 1995 +0200
+++ b/PrimNd.st	Fri Aug 11 22:28:40 1995 +0200
@@ -21,7 +21,7 @@
 COPYRIGHT (c) 1990 by Claus Gittinger
 	     All Rights Reserved
 
-$Header: /cvs/stx/stx/libcomp/Attic/PrimNd.st,v 1.8 1995-08-11 16:03:41 claus Exp $
+$Header: /cvs/stx/stx/libcomp/Attic/PrimNd.st,v 1.9 1995-08-11 20:28:14 claus Exp $
 '!
 
 !PrimitiveNode class methodsFor:'documentation'!
@@ -42,7 +42,7 @@
 
 version
 "
-$Header: /cvs/stx/stx/libcomp/Attic/PrimNd.st,v 1.8 1995-08-11 16:03:41 claus Exp $
+$Header: /cvs/stx/stx/libcomp/Attic/PrimNd.st,v 1.9 1995-08-11 20:28:14 claus Exp $
 "
 !
 
@@ -103,13 +103,13 @@
 
 !PrimitiveNode methodsFor:'code generation'!
 
-codeForSideEffectOn:aStream inBlock:b
+codeForSideEffectOn:aStream inBlock:b for:aCompiler
     "catch code generation"
 
     self error:'cannot compile primitives (as yet)'
 !
 
-codeOn:aStream inBlock:b
+codeOn:aStream inBlock:b for:aCompiler
     "catch code generation"
 
     self error:'cannot compile primitives (as yet)'
--- a/PrimaryNd.st	Fri Aug 11 18:04:27 1995 +0200
+++ b/PrimaryNd.st	Fri Aug 11 22:28:40 1995 +0200
@@ -1,6 +1,6 @@
 "
  COPYRIGHT (c) 1989 by Claus Gittinger
-              All Rights Reserved
+	      All Rights Reserved
 
  This software is furnished under a license and may be used
  only in accordance with the terms of that license and with the
@@ -19,9 +19,9 @@
 
 PrimaryNode comment:'
 COPYRIGHT (c) 1989 by Claus Gittinger
-             All Rights Reserved
+	     All Rights Reserved
 
-$Header: /cvs/stx/stx/libcomp/Attic/PrimaryNd.st,v 1.10 1995-08-11 16:03:45 claus Exp $
+$Header: /cvs/stx/stx/libcomp/Attic/PrimaryNd.st,v 1.11 1995-08-11 20:28:17 claus Exp $
 '!
 
 !PrimaryNode class methodsFor:'documentation'!
@@ -29,7 +29,7 @@
 copyright
 "
  COPYRIGHT (c) 1989 by Claus Gittinger
-              All Rights Reserved
+	      All Rights Reserved
 
  This software is furnished under a license and may be used
  only in accordance with the terms of that license and with the
@@ -42,7 +42,7 @@
 
 version
 "
-$Header: /cvs/stx/stx/libcomp/Attic/PrimaryNd.st,v 1.10 1995-08-11 16:03:45 claus Exp $
+$Header: /cvs/stx/stx/libcomp/Attic/PrimaryNd.st,v 1.11 1995-08-11 20:28:17 claus Exp $
 "
 !
 
@@ -78,16 +78,16 @@
 
 !PrimaryNode methodsFor:'code generation'!
 
-codeForSideEffectOn:aStream inBlock:b
+codeForSideEffectOn:aStream inBlock:b for:aCompiler
     "no code at all"
     ^ self
 !
 
-codeOn:aStream inBlock:codeBlock
+codeOn:aStream inBlock:codeBlock for:aCompiler
     ^ self subclassResponsibility
 !
 
-codeStoreOn:aStream inBlock:codeBlock valueNeeded:valueNeeded
+codeStoreOn:aStream inBlock:codeBlock valueNeeded:valueNeeded for:aCompiler
     ^ self subclassResponsibility
 ! !
 
--- a/PrimaryNode.st	Fri Aug 11 18:04:27 1995 +0200
+++ b/PrimaryNode.st	Fri Aug 11 22:28:40 1995 +0200
@@ -1,6 +1,6 @@
 "
  COPYRIGHT (c) 1989 by Claus Gittinger
-              All Rights Reserved
+	      All Rights Reserved
 
  This software is furnished under a license and may be used
  only in accordance with the terms of that license and with the
@@ -19,9 +19,9 @@
 
 PrimaryNode comment:'
 COPYRIGHT (c) 1989 by Claus Gittinger
-             All Rights Reserved
+	     All Rights Reserved
 
-$Header: /cvs/stx/stx/libcomp/PrimaryNode.st,v 1.10 1995-08-11 16:03:45 claus Exp $
+$Header: /cvs/stx/stx/libcomp/PrimaryNode.st,v 1.11 1995-08-11 20:28:17 claus Exp $
 '!
 
 !PrimaryNode class methodsFor:'documentation'!
@@ -29,7 +29,7 @@
 copyright
 "
  COPYRIGHT (c) 1989 by Claus Gittinger
-              All Rights Reserved
+	      All Rights Reserved
 
  This software is furnished under a license and may be used
  only in accordance with the terms of that license and with the
@@ -42,7 +42,7 @@
 
 version
 "
-$Header: /cvs/stx/stx/libcomp/PrimaryNode.st,v 1.10 1995-08-11 16:03:45 claus Exp $
+$Header: /cvs/stx/stx/libcomp/PrimaryNode.st,v 1.11 1995-08-11 20:28:17 claus Exp $
 "
 !
 
@@ -78,16 +78,16 @@
 
 !PrimaryNode methodsFor:'code generation'!
 
-codeForSideEffectOn:aStream inBlock:b
+codeForSideEffectOn:aStream inBlock:b for:aCompiler
     "no code at all"
     ^ self
 !
 
-codeOn:aStream inBlock:codeBlock
+codeOn:aStream inBlock:codeBlock for:aCompiler
     ^ self subclassResponsibility
 !
 
-codeStoreOn:aStream inBlock:codeBlock valueNeeded:valueNeeded
+codeStoreOn:aStream inBlock:codeBlock valueNeeded:valueNeeded for:aCompiler
     ^ self subclassResponsibility
 ! !
 
--- a/PrimitiveNode.st	Fri Aug 11 18:04:27 1995 +0200
+++ b/PrimitiveNode.st	Fri Aug 11 22:28:40 1995 +0200
@@ -21,7 +21,7 @@
 COPYRIGHT (c) 1990 by Claus Gittinger
 	     All Rights Reserved
 
-$Header: /cvs/stx/stx/libcomp/PrimitiveNode.st,v 1.8 1995-08-11 16:03:41 claus Exp $
+$Header: /cvs/stx/stx/libcomp/PrimitiveNode.st,v 1.9 1995-08-11 20:28:14 claus Exp $
 '!
 
 !PrimitiveNode class methodsFor:'documentation'!
@@ -42,7 +42,7 @@
 
 version
 "
-$Header: /cvs/stx/stx/libcomp/PrimitiveNode.st,v 1.8 1995-08-11 16:03:41 claus Exp $
+$Header: /cvs/stx/stx/libcomp/PrimitiveNode.st,v 1.9 1995-08-11 20:28:14 claus Exp $
 "
 !
 
@@ -103,13 +103,13 @@
 
 !PrimitiveNode methodsFor:'code generation'!
 
-codeForSideEffectOn:aStream inBlock:b
+codeForSideEffectOn:aStream inBlock:b for:aCompiler
     "catch code generation"
 
     self error:'cannot compile primitives (as yet)'
 !
 
-codeOn:aStream inBlock:b
+codeOn:aStream inBlock:b for:aCompiler
     "catch code generation"
 
     self error:'cannot compile primitives (as yet)'
--- a/RetNode.st	Fri Aug 11 18:04:27 1995 +0200
+++ b/RetNode.st	Fri Aug 11 22:28:40 1995 +0200
@@ -21,7 +21,7 @@
 COPYRIGHT (c) 1989 by Claus Gittinger
 	      All Rights Reserved
 
-$Header: /cvs/stx/stx/libcomp/Attic/RetNode.st,v 1.10 1995-08-11 16:03:51 claus Exp $
+$Header: /cvs/stx/stx/libcomp/Attic/RetNode.st,v 1.11 1995-08-11 20:28:21 claus Exp $
 '!
 
 !ReturnNode class methodsFor:'documentation'!
@@ -42,7 +42,7 @@
 
 version
 "
-$Header: /cvs/stx/stx/libcomp/Attic/RetNode.st,v 1.10 1995-08-11 16:03:51 claus Exp $
+$Header: /cvs/stx/stx/libcomp/Attic/RetNode.st,v 1.11 1995-08-11 20:28:21 claus Exp $
 "
 !
 
@@ -85,18 +85,18 @@
 
 !ReturnNode methodsFor:'code generation'!
 
-codeForSideEffectOn:aStream inBlock:b
+codeForSideEffectOn:aStream inBlock:b for:aCompiler
     "redefined - drop not needed since notreached"
 
-    ^ self codeOn:aStream inBlock:b
+    ^ self codeOn:aStream inBlock:b for:aCompiler
 !
 
-codeOn:aStream inBlock:b
+codeOn:aStream inBlock:b for:aCompiler
     |type value index|
 
     "/ after 2.10
     b notNil ifTrue:[
-	expression codeOn:aStream inBlock:b.
+	expression codeOn:aStream inBlock:b for:aCompiler.
 	aStream nextPut:#homeRetTop.
 	^ self
     ].
@@ -157,7 +157,7 @@
 	    ]
 	]
     ].
-    expression codeOn:aStream inBlock:b.
+    expression codeOn:aStream inBlock:b for:aCompiler.
     aStream nextPut:#retTop
 ! !
 
--- a/ReturnNode.st	Fri Aug 11 18:04:27 1995 +0200
+++ b/ReturnNode.st	Fri Aug 11 22:28:40 1995 +0200
@@ -21,7 +21,7 @@
 COPYRIGHT (c) 1989 by Claus Gittinger
 	      All Rights Reserved
 
-$Header: /cvs/stx/stx/libcomp/ReturnNode.st,v 1.10 1995-08-11 16:03:51 claus Exp $
+$Header: /cvs/stx/stx/libcomp/ReturnNode.st,v 1.11 1995-08-11 20:28:21 claus Exp $
 '!
 
 !ReturnNode class methodsFor:'documentation'!
@@ -42,7 +42,7 @@
 
 version
 "
-$Header: /cvs/stx/stx/libcomp/ReturnNode.st,v 1.10 1995-08-11 16:03:51 claus Exp $
+$Header: /cvs/stx/stx/libcomp/ReturnNode.st,v 1.11 1995-08-11 20:28:21 claus Exp $
 "
 !
 
@@ -85,18 +85,18 @@
 
 !ReturnNode methodsFor:'code generation'!
 
-codeForSideEffectOn:aStream inBlock:b
+codeForSideEffectOn:aStream inBlock:b for:aCompiler
     "redefined - drop not needed since notreached"
 
-    ^ self codeOn:aStream inBlock:b
+    ^ self codeOn:aStream inBlock:b for:aCompiler
 !
 
-codeOn:aStream inBlock:b
+codeOn:aStream inBlock:b for:aCompiler
     |type value index|
 
     "/ after 2.10
     b notNil ifTrue:[
-	expression codeOn:aStream inBlock:b.
+	expression codeOn:aStream inBlock:b for:aCompiler.
 	aStream nextPut:#homeRetTop.
 	^ self
     ].
@@ -157,7 +157,7 @@
 	    ]
 	]
     ].
-    expression codeOn:aStream inBlock:b.
+    expression codeOn:aStream inBlock:b for:aCompiler.
     aStream nextPut:#retTop
 ! !
 
--- a/SelfNode.st	Fri Aug 11 18:04:27 1995 +0200
+++ b/SelfNode.st	Fri Aug 11 22:28:40 1995 +0200
@@ -1,6 +1,6 @@
 "
  COPYRIGHT (c) 1994 by Claus Gittinger
-              All Rights Reserved
+	      All Rights Reserved
 
  This software is furnished under a license and may be used
  only in accordance with the terms of that license and with the
@@ -19,9 +19,9 @@
 
 SelfNode comment:'
 COPYRIGHT (c) 1994 by Claus Gittinger
-             All Rights Reserved
+	     All Rights Reserved
 
-$Header: /cvs/stx/stx/libcomp/SelfNode.st,v 1.5 1995-08-11 16:04:00 claus Exp $
+$Header: /cvs/stx/stx/libcomp/SelfNode.st,v 1.6 1995-08-11 20:28:27 claus Exp $
 '!
 
 !SelfNode class methodsFor:'documentation'!
@@ -29,7 +29,7 @@
 copyright
 "
  COPYRIGHT (c) 1994 by Claus Gittinger
-              All Rights Reserved
+	      All Rights Reserved
 
  This software is furnished under a license and may be used
  only in accordance with the terms of that license and with the
@@ -42,7 +42,7 @@
 
 version
 "
-$Header: /cvs/stx/stx/libcomp/SelfNode.st,v 1.5 1995-08-11 16:04:00 claus Exp $
+$Header: /cvs/stx/stx/libcomp/SelfNode.st,v 1.6 1995-08-11 20:28:27 claus Exp $
 "
 !
 
@@ -79,11 +79,11 @@
 
 !SelfNode methodsFor:'code generation'!
 
-codeOn:aStream inBlock:codeBlock
+codeOn:aStream inBlock:codeBlock for:aCompiler
     aStream nextPut:#pushSelf
 !
 
-codeStoreOn:aStream inBlock:codeBlock valueNeeded:valueNeeded
+codeStoreOn:aStream inBlock:codeBlock valueNeeded:valueNeeded for:aCompiler
     "not reached - parser has already checked this"
 
     ^ self error:'store into self - cannot happen'
--- a/StatNode.st	Fri Aug 11 18:04:27 1995 +0200
+++ b/StatNode.st	Fri Aug 11 22:28:40 1995 +0200
@@ -21,7 +21,7 @@
 COPYRIGHT (c) 1989 by Claus Gittinger
 	      All Rights Reserved
 
-$Header: /cvs/stx/stx/libcomp/Attic/StatNode.st,v 1.9 1995-08-11 16:04:07 claus Exp $
+$Header: /cvs/stx/stx/libcomp/Attic/StatNode.st,v 1.10 1995-08-11 20:28:31 claus Exp $
 '!
 
 !StatementNode class methodsFor:'documentation'!
@@ -42,7 +42,7 @@
 
 version
 "
-$Header: /cvs/stx/stx/libcomp/Attic/StatNode.st,v 1.9 1995-08-11 16:04:07 claus Exp $
+$Header: /cvs/stx/stx/libcomp/Attic/StatNode.st,v 1.10 1995-08-11 20:28:31 claus Exp $
 "
 !
 
@@ -78,16 +78,16 @@
 
 !StatementNode methodsFor:'code generation'!
 
-codeOn:aStream inBlock:b
+codeOn:aStream inBlock:b for:aCompiler
     "generate code for this statement"
 
-    expression codeOn:aStream inBlock:b
+    expression codeOn:aStream inBlock:b for:aCompiler
 !
 
-codeForSideEffectOn:aStream inBlock:b
+codeForSideEffectOn:aStream inBlock:b for:aCompiler
     "generate code for this statement - value not needed"
 
-    expression codeForSideEffectOn:aStream inBlock:b
+    expression codeForSideEffectOn:aStream inBlock:b for:aCompiler
 ! !
 
 !StatementNode methodsFor:'accessing'!
--- a/StatementNode.st	Fri Aug 11 18:04:27 1995 +0200
+++ b/StatementNode.st	Fri Aug 11 22:28:40 1995 +0200
@@ -21,7 +21,7 @@
 COPYRIGHT (c) 1989 by Claus Gittinger
 	      All Rights Reserved
 
-$Header: /cvs/stx/stx/libcomp/StatementNode.st,v 1.9 1995-08-11 16:04:07 claus Exp $
+$Header: /cvs/stx/stx/libcomp/StatementNode.st,v 1.10 1995-08-11 20:28:31 claus Exp $
 '!
 
 !StatementNode class methodsFor:'documentation'!
@@ -42,7 +42,7 @@
 
 version
 "
-$Header: /cvs/stx/stx/libcomp/StatementNode.st,v 1.9 1995-08-11 16:04:07 claus Exp $
+$Header: /cvs/stx/stx/libcomp/StatementNode.st,v 1.10 1995-08-11 20:28:31 claus Exp $
 "
 !
 
@@ -78,16 +78,16 @@
 
 !StatementNode methodsFor:'code generation'!
 
-codeOn:aStream inBlock:b
+codeOn:aStream inBlock:b for:aCompiler
     "generate code for this statement"
 
-    expression codeOn:aStream inBlock:b
+    expression codeOn:aStream inBlock:b for:aCompiler
 !
 
-codeForSideEffectOn:aStream inBlock:b
+codeForSideEffectOn:aStream inBlock:b for:aCompiler
     "generate code for this statement - value not needed"
 
-    expression codeForSideEffectOn:aStream inBlock:b
+    expression codeForSideEffectOn:aStream inBlock:b for:aCompiler
 ! !
 
 !StatementNode methodsFor:'accessing'!
--- a/UnaryNd.st	Fri Aug 11 18:04:27 1995 +0200
+++ b/UnaryNd.st	Fri Aug 11 22:28:40 1995 +0200
@@ -1,6 +1,6 @@
 "
  COPYRIGHT (c) 1989 by Claus Gittinger
-              All Rights Reserved
+	      All Rights Reserved
 
  This software is furnished under a license and may be used
  only in accordance with the terms of that license and with the
@@ -19,9 +19,9 @@
 
 UnaryNode comment:'
 COPYRIGHT (c) 1989 by Claus Gittinger
-              All Rights Reserved
+	      All Rights Reserved
 
-$Header: /cvs/stx/stx/libcomp/Attic/UnaryNd.st,v 1.14 1995-08-11 16:04:17 claus Exp $
+$Header: /cvs/stx/stx/libcomp/Attic/UnaryNd.st,v 1.15 1995-08-11 20:28:36 claus Exp $
 '!
 
 !UnaryNode class methodsFor:'documentation'!
@@ -29,7 +29,7 @@
 copyright
 "
  COPYRIGHT (c) 1989 by Claus Gittinger
-              All Rights Reserved
+	      All Rights Reserved
 
  This software is furnished under a license and may be used
  only in accordance with the terms of that license and with the
@@ -42,7 +42,7 @@
 
 version
 "
-$Header: /cvs/stx/stx/libcomp/Attic/UnaryNd.st,v 1.14 1995-08-11 16:04:17 claus Exp $
+$Header: /cvs/stx/stx/libcomp/Attic/UnaryNd.st,v 1.15 1995-08-11 20:28:36 claus Exp $
 "
 !
 
@@ -72,78 +72,78 @@
     when some kind of constant declaration is added to smalltalk.
 "
     folding ifTrue:[
-        "do constant folding ..."
+	"do constant folding ..."
 	r isGlobal ifTrue:[
 	    (r name = 'Character') ifTrue:[
 		recVal := r evaluate.
 		selector := selectorString asSymbolIfInterned.
 		selector notNil ifTrue:[
-                    (#( tab cr space) includes:selector)
-                    ifTrue:[
-		        (recVal respondsTo:selector) ifTrue:[
-                            result := recVal perform:selector.
-                            ^ ConstantNode type:(ConstantNode typeOfConstant:result)
-                                          value:result
-                        ]
+		    (#( tab cr space) includes:selector)
+		    ifTrue:[
+			(recVal respondsTo:selector) ifTrue:[
+			    result := recVal perform:selector.
+			    ^ ConstantNode type:(ConstantNode typeOfConstant:result)
+					  value:result
+			]
 		    ]
 		]
 	    ]
 	].
-        r isConstant ifTrue:[
-            "check if we can do it ..."
-            recVal := r evaluate.
-            selector := selectorString asSymbolIfInterned.
-            selector notNil ifTrue:[
-                (recVal respondsTo:selector) ifTrue:[
-                    "
-                     we could do much more here - but then, we need a dependency from
-                     the folded selectors method to the method we generate code for ...
-                     limit optimizations to those that will never change 
-                     (or, if you change them, it will crash badly anyway ...)
-                    "
-                    SignalSet anySignal "Number domainErrorSignal" handle:[:ex |
-                        "in case of an error, abort fold and return original"
-                        ex return
-                    ] do:[
-                        recVal respondsToArithmetic ifTrue:[
-                            (#( negated abs asPoint degreesToRadians radiansToDegrees
-                                exp ln log sqrt reciprocal 
-                                arcCos arcSin arcTan sin cos tan) includes:selector)
-                            ifTrue:[
-                                result := recVal perform:selector.
-                                ^ ConstantNode type:(ConstantNode typeOfConstant:result)
-                                              value:result
-                            ]
-                        ].
-                        recVal isCharacter ifTrue:[
-                            (#( asciiValue asInteger digitValue) includes:selector) 
-                            ifTrue:[
-                                result := recVal perform:selector.
-                                ^ ConstantNode type:(ConstantNode typeOfConstant:result)
-                                              value:result
-                            ]
-                        ].
-                        recVal isString ifTrue:[
-                            (selector == #withCRs) ifTrue:[
-                                result := recVal perform:selector.
-                                ^ ConstantNode type:(ConstantNode typeOfConstant:result)
-                                              value:result
-                            ]
-                        ].
-                        (recVal isMemberOf:Array) ifTrue:[
-                            (#(asFloatArray asDoubleArray) includes:selector) ifTrue:[
-                                result := recVal perform:selector.
-                                ^ ConstantNode type:(ConstantNode typeOfConstant:result)
-                                              value:result
-                            ]
-                        ].
-                        ^ (self basicNew) receiver:r selector:selector args:nil lineno:0
-                    ].
-                    "when we reach here, something went wrong (something like 0.0 log)"
-                    ^ 'error occured when evaluating constant expression'
-                ]
-            ]
-        ]
+	r isConstant ifTrue:[
+	    "check if we can do it ..."
+	    recVal := r evaluate.
+	    selector := selectorString asSymbolIfInterned.
+	    selector notNil ifTrue:[
+		(recVal respondsTo:selector) ifTrue:[
+		    "
+		     we could do much more here - but then, we need a dependency from
+		     the folded selectors method to the method we generate code for ...
+		     limit optimizations to those that will never change 
+		     (or, if you change them, it will crash badly anyway ...)
+		    "
+		    SignalSet anySignal "Number domainErrorSignal" handle:[:ex |
+			"in case of an error, abort fold and return original"
+			ex return
+		    ] do:[
+			recVal respondsToArithmetic ifTrue:[
+			    (#( negated abs asPoint degreesToRadians radiansToDegrees
+				exp ln log sqrt reciprocal 
+				arcCos arcSin arcTan sin cos tan) includes:selector)
+			    ifTrue:[
+				result := recVal perform:selector.
+				^ ConstantNode type:(ConstantNode typeOfConstant:result)
+					      value:result
+			    ]
+			].
+			recVal isCharacter ifTrue:[
+			    (#( asciiValue asInteger digitValue) includes:selector) 
+			    ifTrue:[
+				result := recVal perform:selector.
+				^ ConstantNode type:(ConstantNode typeOfConstant:result)
+					      value:result
+			    ]
+			].
+			recVal isString ifTrue:[
+			    (selector == #withCRs) ifTrue:[
+				result := recVal perform:selector.
+				^ ConstantNode type:(ConstantNode typeOfConstant:result)
+					      value:result
+			    ]
+			].
+			(recVal isMemberOf:Array) ifTrue:[
+			    (#(asFloatArray asDoubleArray) includes:selector) ifTrue:[
+				result := recVal perform:selector.
+				^ ConstantNode type:(ConstantNode typeOfConstant:result)
+					      value:result
+			    ]
+			].
+			^ (self basicNew) receiver:r selector:selector args:nil lineno:0
+		    ].
+		    "when we reach here, something went wrong (something like 0.0 log)"
+		    ^ 'error occured when evaluating constant expression'
+		]
+	    ]
+	]
     ].
     ^ (self basicNew) receiver:r selector:selectorString args:nil lineno:0
 ! !
@@ -169,7 +169,7 @@
      (selector = 'true') or:[
      (selector = 'false') or:[
      (Smalltalk includesKey:selector)]]]]]) ifTrue:[
-        ^ 'funny selector; possible missing ''.'' or keyword'
+	^ 'funny selector; possible missing ''.'' or keyword'
     ].
 
     "more to come ..."
@@ -182,39 +182,39 @@
     "evaluate the expression represented by the receiver"
 
     receiver isSuper ifTrue:[
-        ^ super evaluate
+	^ super evaluate
     ].
     ^ (receiver evaluate) perform:selector
 ! !
 
 !UnaryNode methodsFor:'code generation'!
 
-codeOn:aStream inBlock:b
+codeOn:aStream inBlock:b for:aCompiler
     "append bytecode for the receiver to aStream."
 
     "
      optimize 
-        (a == b) not -> (a ~~ b)
-        (a ~~ b) not -> (a == b)
+	(a == b) not -> (a ~~ b)
+	(a ~~ b) not -> (a == b)
     "
     (selector == #not) ifTrue:[
-        (receiver class == BinaryNode) ifTrue:[
-            (receiver selector == #==) ifTrue:[
-                (BinaryNode receiver:(receiver receiver)
-                            selector:#~~
-                                 arg:(receiver arg)) codeOn:aStream inBlock:b.
-                ^ self
-            ].
-            (receiver selector == #~~) ifTrue:[
-                (BinaryNode receiver:(receiver receiver)
-                            selector:#==
-                                 arg:(receiver arg)) codeOn:aStream inBlock:b.
-                ^ self
-            ]
-        ]
+	(receiver class == BinaryNode) ifTrue:[
+	    (receiver selector == #==) ifTrue:[
+		(BinaryNode receiver:(receiver receiver)
+			    selector:#~~
+				 arg:(receiver arg)) codeOn:aStream inBlock:b for:aCompiler.
+		^ self
+	    ].
+	    (receiver selector == #~~) ifTrue:[
+		(BinaryNode receiver:(receiver receiver)
+			    selector:#==
+				 arg:(receiver arg)) codeOn:aStream inBlock:b for:aCompiler.
+		^ self
+	    ]
+	]
     ].
 
-    ^ super codeOn:aStream inBlock:b
+    ^ super codeOn:aStream inBlock:b for:aCompiler
 ! !
 
 !UnaryNode methodsFor:'printing'!
@@ -226,16 +226,16 @@
 
     needParen := false.
     receiver isMessage ifTrue:[
-        receiver isUnaryMessage ifFalse:[
-            needParen := true
-        ].
+	receiver isUnaryMessage ifFalse:[
+	    needParen := true
+	].
     ].
     needParen ifTrue:[
-        aStream nextPutAll:'('
+	aStream nextPutAll:'('
     ].
     receiver printOn:aStream.
     needParen ifTrue:[
-        aStream nextPutAll:') '
+	aStream nextPutAll:') '
     ].
     aStream space.
     selector printString printOn:aStream.
--- a/UnaryNode.st	Fri Aug 11 18:04:27 1995 +0200
+++ b/UnaryNode.st	Fri Aug 11 22:28:40 1995 +0200
@@ -1,6 +1,6 @@
 "
  COPYRIGHT (c) 1989 by Claus Gittinger
-              All Rights Reserved
+	      All Rights Reserved
 
  This software is furnished under a license and may be used
  only in accordance with the terms of that license and with the
@@ -19,9 +19,9 @@
 
 UnaryNode comment:'
 COPYRIGHT (c) 1989 by Claus Gittinger
-              All Rights Reserved
+	      All Rights Reserved
 
-$Header: /cvs/stx/stx/libcomp/UnaryNode.st,v 1.14 1995-08-11 16:04:17 claus Exp $
+$Header: /cvs/stx/stx/libcomp/UnaryNode.st,v 1.15 1995-08-11 20:28:36 claus Exp $
 '!
 
 !UnaryNode class methodsFor:'documentation'!
@@ -29,7 +29,7 @@
 copyright
 "
  COPYRIGHT (c) 1989 by Claus Gittinger
-              All Rights Reserved
+	      All Rights Reserved
 
  This software is furnished under a license and may be used
  only in accordance with the terms of that license and with the
@@ -42,7 +42,7 @@
 
 version
 "
-$Header: /cvs/stx/stx/libcomp/UnaryNode.st,v 1.14 1995-08-11 16:04:17 claus Exp $
+$Header: /cvs/stx/stx/libcomp/UnaryNode.st,v 1.15 1995-08-11 20:28:36 claus Exp $
 "
 !
 
@@ -72,78 +72,78 @@
     when some kind of constant declaration is added to smalltalk.
 "
     folding ifTrue:[
-        "do constant folding ..."
+	"do constant folding ..."
 	r isGlobal ifTrue:[
 	    (r name = 'Character') ifTrue:[
 		recVal := r evaluate.
 		selector := selectorString asSymbolIfInterned.
 		selector notNil ifTrue:[
-                    (#( tab cr space) includes:selector)
-                    ifTrue:[
-		        (recVal respondsTo:selector) ifTrue:[
-                            result := recVal perform:selector.
-                            ^ ConstantNode type:(ConstantNode typeOfConstant:result)
-                                          value:result
-                        ]
+		    (#( tab cr space) includes:selector)
+		    ifTrue:[
+			(recVal respondsTo:selector) ifTrue:[
+			    result := recVal perform:selector.
+			    ^ ConstantNode type:(ConstantNode typeOfConstant:result)
+					  value:result
+			]
 		    ]
 		]
 	    ]
 	].
-        r isConstant ifTrue:[
-            "check if we can do it ..."
-            recVal := r evaluate.
-            selector := selectorString asSymbolIfInterned.
-            selector notNil ifTrue:[
-                (recVal respondsTo:selector) ifTrue:[
-                    "
-                     we could do much more here - but then, we need a dependency from
-                     the folded selectors method to the method we generate code for ...
-                     limit optimizations to those that will never change 
-                     (or, if you change them, it will crash badly anyway ...)
-                    "
-                    SignalSet anySignal "Number domainErrorSignal" handle:[:ex |
-                        "in case of an error, abort fold and return original"
-                        ex return
-                    ] do:[
-                        recVal respondsToArithmetic ifTrue:[
-                            (#( negated abs asPoint degreesToRadians radiansToDegrees
-                                exp ln log sqrt reciprocal 
-                                arcCos arcSin arcTan sin cos tan) includes:selector)
-                            ifTrue:[
-                                result := recVal perform:selector.
-                                ^ ConstantNode type:(ConstantNode typeOfConstant:result)
-                                              value:result
-                            ]
-                        ].
-                        recVal isCharacter ifTrue:[
-                            (#( asciiValue asInteger digitValue) includes:selector) 
-                            ifTrue:[
-                                result := recVal perform:selector.
-                                ^ ConstantNode type:(ConstantNode typeOfConstant:result)
-                                              value:result
-                            ]
-                        ].
-                        recVal isString ifTrue:[
-                            (selector == #withCRs) ifTrue:[
-                                result := recVal perform:selector.
-                                ^ ConstantNode type:(ConstantNode typeOfConstant:result)
-                                              value:result
-                            ]
-                        ].
-                        (recVal isMemberOf:Array) ifTrue:[
-                            (#(asFloatArray asDoubleArray) includes:selector) ifTrue:[
-                                result := recVal perform:selector.
-                                ^ ConstantNode type:(ConstantNode typeOfConstant:result)
-                                              value:result
-                            ]
-                        ].
-                        ^ (self basicNew) receiver:r selector:selector args:nil lineno:0
-                    ].
-                    "when we reach here, something went wrong (something like 0.0 log)"
-                    ^ 'error occured when evaluating constant expression'
-                ]
-            ]
-        ]
+	r isConstant ifTrue:[
+	    "check if we can do it ..."
+	    recVal := r evaluate.
+	    selector := selectorString asSymbolIfInterned.
+	    selector notNil ifTrue:[
+		(recVal respondsTo:selector) ifTrue:[
+		    "
+		     we could do much more here - but then, we need a dependency from
+		     the folded selectors method to the method we generate code for ...
+		     limit optimizations to those that will never change 
+		     (or, if you change them, it will crash badly anyway ...)
+		    "
+		    SignalSet anySignal "Number domainErrorSignal" handle:[:ex |
+			"in case of an error, abort fold and return original"
+			ex return
+		    ] do:[
+			recVal respondsToArithmetic ifTrue:[
+			    (#( negated abs asPoint degreesToRadians radiansToDegrees
+				exp ln log sqrt reciprocal 
+				arcCos arcSin arcTan sin cos tan) includes:selector)
+			    ifTrue:[
+				result := recVal perform:selector.
+				^ ConstantNode type:(ConstantNode typeOfConstant:result)
+					      value:result
+			    ]
+			].
+			recVal isCharacter ifTrue:[
+			    (#( asciiValue asInteger digitValue) includes:selector) 
+			    ifTrue:[
+				result := recVal perform:selector.
+				^ ConstantNode type:(ConstantNode typeOfConstant:result)
+					      value:result
+			    ]
+			].
+			recVal isString ifTrue:[
+			    (selector == #withCRs) ifTrue:[
+				result := recVal perform:selector.
+				^ ConstantNode type:(ConstantNode typeOfConstant:result)
+					      value:result
+			    ]
+			].
+			(recVal isMemberOf:Array) ifTrue:[
+			    (#(asFloatArray asDoubleArray) includes:selector) ifTrue:[
+				result := recVal perform:selector.
+				^ ConstantNode type:(ConstantNode typeOfConstant:result)
+					      value:result
+			    ]
+			].
+			^ (self basicNew) receiver:r selector:selector args:nil lineno:0
+		    ].
+		    "when we reach here, something went wrong (something like 0.0 log)"
+		    ^ 'error occured when evaluating constant expression'
+		]
+	    ]
+	]
     ].
     ^ (self basicNew) receiver:r selector:selectorString args:nil lineno:0
 ! !
@@ -169,7 +169,7 @@
      (selector = 'true') or:[
      (selector = 'false') or:[
      (Smalltalk includesKey:selector)]]]]]) ifTrue:[
-        ^ 'funny selector; possible missing ''.'' or keyword'
+	^ 'funny selector; possible missing ''.'' or keyword'
     ].
 
     "more to come ..."
@@ -182,39 +182,39 @@
     "evaluate the expression represented by the receiver"
 
     receiver isSuper ifTrue:[
-        ^ super evaluate
+	^ super evaluate
     ].
     ^ (receiver evaluate) perform:selector
 ! !
 
 !UnaryNode methodsFor:'code generation'!
 
-codeOn:aStream inBlock:b
+codeOn:aStream inBlock:b for:aCompiler
     "append bytecode for the receiver to aStream."
 
     "
      optimize 
-        (a == b) not -> (a ~~ b)
-        (a ~~ b) not -> (a == b)
+	(a == b) not -> (a ~~ b)
+	(a ~~ b) not -> (a == b)
     "
     (selector == #not) ifTrue:[
-        (receiver class == BinaryNode) ifTrue:[
-            (receiver selector == #==) ifTrue:[
-                (BinaryNode receiver:(receiver receiver)
-                            selector:#~~
-                                 arg:(receiver arg)) codeOn:aStream inBlock:b.
-                ^ self
-            ].
-            (receiver selector == #~~) ifTrue:[
-                (BinaryNode receiver:(receiver receiver)
-                            selector:#==
-                                 arg:(receiver arg)) codeOn:aStream inBlock:b.
-                ^ self
-            ]
-        ]
+	(receiver class == BinaryNode) ifTrue:[
+	    (receiver selector == #==) ifTrue:[
+		(BinaryNode receiver:(receiver receiver)
+			    selector:#~~
+				 arg:(receiver arg)) codeOn:aStream inBlock:b for:aCompiler.
+		^ self
+	    ].
+	    (receiver selector == #~~) ifTrue:[
+		(BinaryNode receiver:(receiver receiver)
+			    selector:#==
+				 arg:(receiver arg)) codeOn:aStream inBlock:b for:aCompiler.
+		^ self
+	    ]
+	]
     ].
 
-    ^ super codeOn:aStream inBlock:b
+    ^ super codeOn:aStream inBlock:b for:aCompiler
 ! !
 
 !UnaryNode methodsFor:'printing'!
@@ -226,16 +226,16 @@
 
     needParen := false.
     receiver isMessage ifTrue:[
-        receiver isUnaryMessage ifFalse:[
-            needParen := true
-        ].
+	receiver isUnaryMessage ifFalse:[
+	    needParen := true
+	].
     ].
     needParen ifTrue:[
-        aStream nextPutAll:'('
+	aStream nextPutAll:'('
     ].
     receiver printOn:aStream.
     needParen ifTrue:[
-        aStream nextPutAll:') '
+	aStream nextPutAll:') '
     ].
     aStream space.
     selector printString printOn:aStream.
--- a/VarNode.st	Fri Aug 11 18:04:27 1995 +0200
+++ b/VarNode.st	Fri Aug 11 22:28:40 1995 +0200
@@ -21,7 +21,7 @@
 COPYRIGHT (c) 1994 by Claus Gittinger
 	     All Rights Reserved
 
-$Header: /cvs/stx/stx/libcomp/Attic/VarNode.st,v 1.8 1995-08-11 16:04:24 claus Exp $
+$Header: /cvs/stx/stx/libcomp/Attic/VarNode.st,v 1.9 1995-08-11 20:28:40 claus Exp $
 '!
 
 !VariableNode class methodsFor:'documentation'!
@@ -42,7 +42,7 @@
 
 version
 "
-$Header: /cvs/stx/stx/libcomp/Attic/VarNode.st,v 1.8 1995-08-11 16:04:24 claus Exp $
+$Header: /cvs/stx/stx/libcomp/Attic/VarNode.st,v 1.9 1995-08-11 20:28:40 claus Exp $
 "
 !
 
@@ -251,12 +251,12 @@
 
 !VariableNode methodsFor:'code generation'!
 
-codeForSideEffectOn:aStream inBlock:b
+codeForSideEffectOn:aStream inBlock:b for:aCompiler
     "no code at all"
     ^ self
 !
 
-codeOn:aStream inBlock:codeBlock
+codeOn:aStream inBlock:codeBlock for:aCompiler
     |theCode b deltaLevel|
 
     (type == #MethodArg) ifTrue:[
@@ -374,7 +374,7 @@
     aStream nextPut:#pushLit; nextPut:value
 !
 
-codeStoreOn:aStream inBlock:codeBlock valueNeeded:valueNeeded
+codeStoreOn:aStream inBlock:codeBlock valueNeeded:valueNeeded for:aCompiler
     |theCode b deltaLevel|
 
     valueNeeded ifTrue:[
--- a/VariableNode.st	Fri Aug 11 18:04:27 1995 +0200
+++ b/VariableNode.st	Fri Aug 11 22:28:40 1995 +0200
@@ -21,7 +21,7 @@
 COPYRIGHT (c) 1994 by Claus Gittinger
 	     All Rights Reserved
 
-$Header: /cvs/stx/stx/libcomp/VariableNode.st,v 1.8 1995-08-11 16:04:24 claus Exp $
+$Header: /cvs/stx/stx/libcomp/VariableNode.st,v 1.9 1995-08-11 20:28:40 claus Exp $
 '!
 
 !VariableNode class methodsFor:'documentation'!
@@ -42,7 +42,7 @@
 
 version
 "
-$Header: /cvs/stx/stx/libcomp/VariableNode.st,v 1.8 1995-08-11 16:04:24 claus Exp $
+$Header: /cvs/stx/stx/libcomp/VariableNode.st,v 1.9 1995-08-11 20:28:40 claus Exp $
 "
 !
 
@@ -251,12 +251,12 @@
 
 !VariableNode methodsFor:'code generation'!
 
-codeForSideEffectOn:aStream inBlock:b
+codeForSideEffectOn:aStream inBlock:b for:aCompiler
     "no code at all"
     ^ self
 !
 
-codeOn:aStream inBlock:codeBlock
+codeOn:aStream inBlock:codeBlock for:aCompiler
     |theCode b deltaLevel|
 
     (type == #MethodArg) ifTrue:[
@@ -374,7 +374,7 @@
     aStream nextPut:#pushLit; nextPut:value
 !
 
-codeStoreOn:aStream inBlock:codeBlock valueNeeded:valueNeeded
+codeStoreOn:aStream inBlock:codeBlock valueNeeded:valueNeeded for:aCompiler
     |theCode b deltaLevel|
 
     valueNeeded ifTrue:[