.
--- 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:[