--- a/BCompiler.st Sun Aug 13 00:59:41 1995 +0200
+++ b/BCompiler.st Sun Aug 13 22:52:47 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.32 1995-08-12 22:59:26 claus Exp $
+$Header: /cvs/stx/stx/libcomp/Attic/BCompiler.st,v 1.33 1995-08-13 20:51:58 claus Exp $
'!
!ByteCodeCompiler class methodsFor:'documentation'!
@@ -47,7 +47,7 @@
version
"
-$Header: /cvs/stx/stx/libcomp/Attic/BCompiler.st,v 1.32 1995-08-12 22:59:26 claus Exp $
+$Header: /cvs/stx/stx/libcomp/Attic/BCompiler.st,v 1.33 1995-08-13 20:51:58 claus Exp $
"
!
@@ -534,6 +534,8 @@
|canDo|
+ ObjectFileLoader isNil ifTrue:[^ false].
+
canDo := false.
OperatingSystem getSystemType = 'iris' ifTrue:[
canDo := true.
@@ -709,54 +711,17 @@
].
(extra == #lit) ifTrue:[
index := self addLiteral:(symbolicCodeArray at:symIndex).
- index > 255 ifTrue:[
- codeSymbol == #pushLit ifFalse:[
- round ~~ 1 ifTrue:[
- self parseError:'too many (' , index printString , ') literals in method (at ' , codeSymbol , ') - please simplify'.
- ^ #Error
- ].
- "move that literal to the front"
- ('COMPILER: move literal', (litArray at:index) , ' to front') infoPrintNL.
- t := Array basicNew:litArray size.
- t replaceFrom:2 to:index - 1 with:litArray startingAt:1.
- t replaceFrom:index with:litArray startingAt:index+1.
- t at:1 put:(litArray at:index).
- litArray := t.
- needRetry := true.
- index := 0
- ] ifTrue:[
- "
- make pushLit into pushLLit and start over
- "
- 'COMPILER: need long index for literal' infoPrintNL.
- symbolicCodeArray at:(symIndex - 1) put:#pushLLit.
- codeSize := codeSize + 1.
- needRetry := true.
- index := 0.
- ]
- ].
symIndex := symIndex + 1.
self appendByte:index
].
(extra == #speciallit) ifTrue:[
index := self addLiteral:(symbolicCodeArray at:symIndex).
index > 255 ifTrue:[
- round ~~ 1 ifTrue:[
self parseError:'too many globals (' ,
(symbolicCodeArray at:symIndex) ,
' index=' , index printString ,
') in method - please simplify'.
^ #Error
- ].
- "
- there is a last chance, if we move
- all global-literals to the beginning of the
- literal array ...
- "
- 'COMPILER: resorted literals (almost at limits)' infoPrintNL.
- self moveGlobalsToFront.
- needRetry := true.
- index := 0.
].
symIndex := symIndex + 1.
self appendByte:index.
@@ -815,47 +780,72 @@
symIndex := symIndex + 1.
self appendByte:level
].
- (extra == #llit) ifTrue:[
- index := self addLiteral:(symbolicCodeArray at:symIndex).
- index > 16rFFFF ifTrue:[
- self parseError:'too many (' , index printString , ') literals in method - please simplify'.
- ^ #Error
- ].
- symIndex := symIndex + 1.
- self appendWord:index
- ].
].
- ((codeSymbol == #send)
- or:[codeSymbol == #superSend
- or:[codeSymbol == #hereSend]]) ifTrue:[
- index := self addLiteral:(symbolicCodeArray at:symIndex).
- symIndex := symIndex + 1.
- nargs := symbolicCodeArray at:symIndex.
- symIndex := symIndex + 1.
- self appendByte:nargs.
- self appendByte:index.
- (codeSymbol == #superSend) ifTrue:[
- symIndex := symIndex + 1.
- index := self addLiteral:(classToCompileFor superclass).
- self appendByte:index
- ].
- (codeSymbol == #hereSend) ifTrue:[
- symIndex := symIndex + 1.
- index := self addLiteral:classToCompileFor.
- self appendByte:index
- ].
- stackDelta := nargs negated
- ] ifFalse:[
- (codeSymbol == #sendDrop) ifTrue:[
- index := self addLiteral:(symbolicCodeArray at:symIndex).
- symIndex := symIndex + 1.
- nargs := symbolicCodeArray at:symIndex.
- symIndex := symIndex + 1.
- self appendByte:nargs.
- self appendByte:index.
- stackDelta := (nargs + 1) negated
- ]
+ extra == #special ifTrue:[
+ ((codeSymbol == #send)
+ or:[codeSymbol == #superSend
+ or:[codeSymbol == #hereSend]]) ifTrue:[
+ index := symbolicCodeArray at:symIndex.
+ symIndex := symIndex + 1.
+ nargs := symbolicCodeArray at:symIndex.
+ symIndex := symIndex + 1.
+ self appendByte:nargs.
+ self appendByte:index.
+ (codeSymbol == #superSend) ifTrue:[
+ symIndex := symIndex + 1.
+ index := self addLiteral:(classToCompileFor superclass).
+ self appendByte:index
+ ].
+ (codeSymbol == #hereSend) ifTrue:[
+ symIndex := symIndex + 1.
+ index := self addLiteral:classToCompileFor.
+ self appendByte:index
+ ].
+ stackDelta := nargs negated
+ ] ifFalse:[
+ (codeSymbol == #sendDrop) ifTrue:[
+ index := symbolicCodeArray at:symIndex.
+ symIndex := symIndex + 1.
+ nargs := symbolicCodeArray at:symIndex.
+ symIndex := symIndex + 1.
+ self appendByte:nargs.
+ self appendByte:index.
+ stackDelta := (nargs + 1) negated
+ ] ifFalse:[
+ (codeSymbol == #sendDropL) ifTrue:[
+ index := symbolicCodeArray at:symIndex.
+ symIndex := symIndex + 2.
+ nargs := symbolicCodeArray at:symIndex.
+ symIndex := symIndex + 1.
+ self appendByte:nargs.
+ self appendWord:index.
+ stackDelta := (nargs + 1) negated
+ ] ifFalse:[
+ ((codeSymbol == #sendL)
+ or:[codeSymbol == #superSendL
+ or:[codeSymbol == #hereSendL]]) ifTrue:[
+ index := symbolicCodeArray at:symIndex.
+ symIndex := symIndex + 1.
+ nargs := symbolicCodeArray at:symIndex.
+ symIndex := symIndex + 1.
+ self appendByte:nargs.
+ self appendWord:index.
+ (codeSymbol == #superSendL) ifTrue:[
+ symIndex := symIndex + 1.
+ index := self addLiteral:(classToCompileFor superclass).
+ self appendByte:index
+ ].
+ (codeSymbol == #hereSendL) ifTrue:[
+ symIndex := symIndex + 1.
+ index := self addLiteral:classToCompileFor.
+ self appendByte:index
+ ].
+ stackDelta := nargs negated
+ ]
+ ]
+ ]
+ ].
].
stackDepth := stackDepth + stackDelta.
(stackDepth > maxStackDepth) ifTrue:[
@@ -1303,9 +1293,9 @@
(aSymbol == #lineno) ifTrue:[lineno := true. ^ 8].
- (aSymbol == #send) ifTrue:[lineno := true. ^ 19].
- (aSymbol == #superSend) ifTrue:[lineno := true. ^ 20].
- (aSymbol == #hereSend) ifTrue:[lineno := true. ^ 20].
+ (aSymbol == #send) ifTrue:[lineno := true. extra := #special. ^ 19].
+ (aSymbol == #superSend) ifTrue:[lineno := true. extra := #special. ^ 20].
+ (aSymbol == #hereSend) ifTrue:[lineno := true. extra := #special. ^ 20].
(aSymbol == #drop) ifTrue:[stackDelta := -1. ^ 18].
(aSymbol == #dup) ifTrue:[stackDelta := 1. ^ 47].
@@ -1336,25 +1326,25 @@
(aSymbol == #push2) ifTrue:[stackDelta := 1. ^139].
(aSymbol == #pushMinus1) ifTrue:[stackDelta := 1. ^122].
- (aSymbol == #send0) ifTrue:[lineno := true. extra := #lit. ^21].
- (aSymbol == #send1) ifTrue:[lineno := true. extra := #lit. stackDelta := -1. ^22].
- (aSymbol == #send2) ifTrue:[lineno := true. extra := #lit. stackDelta := -2. ^23].
- (aSymbol == #send3) ifTrue:[lineno := true. extra := #lit. stackDelta := -3. ^24].
+ (aSymbol == #send0) ifTrue:[lineno := true. extra := #index. ^21].
+ (aSymbol == #send1) ifTrue:[lineno := true. extra := #index. stackDelta := -1. ^22].
+ (aSymbol == #send2) ifTrue:[lineno := true. extra := #index. stackDelta := -2. ^23].
+ (aSymbol == #send3) ifTrue:[lineno := true. extra := #index. stackDelta := -3. ^24].
- (aSymbol == #sendSelf0) ifTrue:[lineno := true. extra := #lit. stackDelta := 1. ^180].
- (aSymbol == #sendSelf1) ifTrue:[lineno := true. extra := #lit. ^181].
- (aSymbol == #sendSelf2) ifTrue:[lineno := true. extra := #lit. stackDelta := -1. ^182].
- (aSymbol == #sendSelf3) ifTrue:[lineno := true. extra := #lit. stackDelta := -2. ^183].
- (aSymbol == #sendSelfDrop0) ifTrue:[lineno := true. extra := #lit. ^184].
- (aSymbol == #sendSelfDrop1) ifTrue:[lineno := true. extra := #lit. stackDelta := -1. ^185].
- (aSymbol == #sendSelfDrop2) ifTrue:[lineno := true. extra := #lit. stackDelta := -2. ^186].
- (aSymbol == #sendSelfDrop3) ifTrue:[lineno := true. extra := #lit. stackDelta := -3. ^187].
+ (aSymbol == #sendSelf0) ifTrue:[lineno := true. extra := #index. stackDelta := 1. ^180].
+ (aSymbol == #sendSelf1) ifTrue:[lineno := true. extra := #index. ^181].
+ (aSymbol == #sendSelf2) ifTrue:[lineno := true. extra := #index. stackDelta := -1. ^182].
+ (aSymbol == #sendSelf3) ifTrue:[lineno := true. extra := #index. stackDelta := -2. ^183].
+ (aSymbol == #sendSelfDrop0) ifTrue:[lineno := true. extra := #index. ^184].
+ (aSymbol == #sendSelfDrop1) ifTrue:[lineno := true. extra := #index. stackDelta := -1. ^185].
+ (aSymbol == #sendSelfDrop2) ifTrue:[lineno := true. extra := #index. stackDelta := -2. ^186].
+ (aSymbol == #sendSelfDrop3) ifTrue:[lineno := true. extra := #index. stackDelta := -3. ^187].
- (aSymbol == #sendDrop) ifTrue:[lineno := true. ^25].
- (aSymbol == #sendDrop0) ifTrue:[lineno := true. extra := #lit. stackDelta := -1. ^26].
- (aSymbol == #sendDrop1) ifTrue:[lineno := true. extra := #lit. stackDelta := -2. ^27].
- (aSymbol == #sendDrop2) ifTrue:[lineno := true. extra := #lit. stackDelta := -3. ^28].
- (aSymbol == #sendDrop3) ifTrue:[lineno := true. extra := #lit. stackDelta := -4. ^29].
+ (aSymbol == #sendDrop) ifTrue:[lineno := true. extra := #special. ^25].
+ (aSymbol == #sendDrop0) ifTrue:[lineno := true. extra := #index. stackDelta := -1. ^26].
+ (aSymbol == #sendDrop1) ifTrue:[lineno := true. extra := #index. stackDelta := -2. ^27].
+ (aSymbol == #sendDrop2) ifTrue:[lineno := true. extra := #index. stackDelta := -3. ^28].
+ (aSymbol == #sendDrop3) ifTrue:[lineno := true. extra := #index. stackDelta := -4. ^29].
(aSymbol == #pushMethodVar1) ifTrue:[stackDelta := 1. ^80].
(aSymbol == #pushMethodVar2) ifTrue:[stackDelta := 1. ^81].
@@ -1473,6 +1463,8 @@
(aSymbol == #mkNilBlock) ifTrue:[^ 157].
(aSymbol == #gt0) ifTrue:[lineno := true. self addLiteral:#>. ^ 212].
+ (aSymbol == #basicNew) ifTrue:[lineno := true. self addLiteral:aSymbol. ^ 211].
+ (aSymbol == #new) ifTrue:[lineno := true. self addLiteral:aSymbol. ^ 213].
(aSymbol == #falseJumpabs) ifTrue:[stackDelta := -1. extra := #absoffset. ^ 190].
(aSymbol == #trueJumpabs) ifTrue:[stackDelta := -1. extra := #absoffset. ^ 191].
@@ -1486,12 +1478,16 @@
(aSymbol == #notEqJumpabs) ifTrue:[stackDelta := -2. extra := #absoffset. ^ 199].
(aSymbol == #pushThisContext) ifTrue:[stackDelta := 1. ^ 144].
- (aSymbol == #pushLLit) ifTrue:[stackDelta := 1. extra := #llit. ^ 201].
(aSymbol == #isNil) ifTrue:[^ 188].
(aSymbol == #notNil) ifTrue:[^ 189].
(aSymbol == #not) ifTrue:[lineno := true. ^ 179].
+ (aSymbol == #sendL) ifTrue:[lineno := true. extra := #special. ^ 205].
+ (aSymbol == #sendDropL) ifTrue:[lineno := true. extra := #special. ^ 204].
+ (aSymbol == #superSendL) ifTrue:[lineno := true. extra := #special. ^ 206].
+ (aSymbol == #hereSendL) ifTrue:[lineno := true. extra := #special. ^ 206].
+
self error:'invalid code symbol'.
errorFlag := #Error
! !