- IRTempStore
changed: #version_SVN
- IRAccess
changed: #version_SVN
- IRMethod
changed: #version_SVN
- IRPrinter
changed: #version_SVN
- IRTempRead
changed: #version_SVN
- IRLiteralVariableRead
changed: #version_SVN
- IRLine
changed: #version_SVN
- IRClosure
changed: #version_SVN
- IRFunction
changed: #version_SVN
- IRDup
changed: #version_SVN
- IRTranslator
changed: #version_SVN
- IRInterpreter
changed: #version_SVN
- IRBuilder
changed: #version_SVN
- IRBytecodeGenerator
changed: #version_SVN
- IRJumpOverBlock
changed: #version_SVN
- IRBlockReturnTop
changed: #version_SVN
- IRSequence
changed: #version_SVN
- IRDecompiler
changed: #version_SVN
- IRInstVarStore
changed: #version_SVN
- cvut_stx_goodies_newcompiler
added:
#excludedFromPreRequisites
#extensionsVersion_SVN
#svnRepositoryUrlString
changed:
#preRequisites
#svnRevisionNr
#version_SVN
- IRLiteralVariableAccess
changed: #version_SVN
- IRTransformTest
changed: #version_SVN
- IRStackCount
changed: #version_SVN
- IRInstVarAccess
changed: #version_SVN
- IRLiteralVariableStore
changed: #version_SVN
- IRBuilderTest
changed: #version_SVN
- IRInstruction
changed: #version_SVN
- IRTempAccess
changed: #version_SVN
- IRConstant
changed: #version_SVN
- IRSend
changed: #version_SVN
- IRInstVarRead
changed: #version_SVN
- IRPop
changed: #version_SVN
- IRReturn
changed: #version_SVN
- IRJump
changed: #version_SVN
- IRJumpIf
changed: #version_SVN
- extensions
...
"{ Package: 'cvut:stx/goodies/newcompiler' }"
IRInterpreter subclass:#IRPrinter
instanceVariableNames:'stream indent'
classVariableNames:''
poolDictionaries:''
category:'NewCompiler-IR'
!
IRPrinter comment:'I interpret IRMethod instructions and write them out to a print stream.'
!
!IRPrinter methodsFor:'initialize'!
indent: tabs
indent _ tabs
!
stream: stringWriteStream
stream _ stringWriteStream
! !
!IRPrinter methodsFor:'instructions'!
blockReturnTop
stream nextPutAll: 'blockReturnTop'.
!
goto: seqNum
stream nextPutAll: 'goto: '.
seqNum printOn: stream.
!
if: bool goto: seqNum1 otherwise: seqNum2
stream nextPutAll: 'if: '.
bool printOn: stream.
stream nextPutAll: ' goto: '.
seqNum1 printOn: stream.
stream nextPutAll: ' else: '.
seqNum2 printOn: stream.
!
jumpOverBlock: blockSeq to: dest
stream nextPutAll: 'jumpOverBlock: '.
stream nextPutAll: ' block '.
blockSeq printOn: stream.
stream nextPutAll: ' cont: '.
dest printOn: stream.
!
label: seqNum
"add tab and cr since this does not get called within interpretInstruction:"
stream cr. "extra cr just to space out sequences"
indent timesRepeat: [stream tab].
stream nextPutAll: 'label: '.
seqNum printOn: stream.
stream cr.
!
line: line
stream nextPutAll: 'line: '.
line printOn: stream
"Created: / 02-12-2008 / 09:00:40 / Jan Vrany <vranyj1@fel.cvut.cz>"
!
popTop
stream nextPutAll: 'popTop'
!
pushBlock: irClosure
stream nextPutAll: 'pushBlock:'.
IRPrinter new
indent: indent + 1;
stream: stream;
interpret: irClosure removeEmptyStart.
"Modified: / 30-03-2009 / 16:51:49 / Jan Vrany <vranyj1@fel.cvut.cz>"
!
pushDup
stream nextPutAll: 'pushDup'
!
pushLiteral: object
stream nextPutAll: 'pushLiteral: '.
object isVariableBinding ifTrue: [^ stream nextPutAll: object key].
object printOn: stream.
((object isKindOf: BlockClosure) or: [object isKindOf: CompiledMethod])
ifTrue: [
IRPrinter new
indent: indent + 1;
stream: stream;
interpret: object method ir removeEmptyStart].
"Modified: / 03-11-2008 / 17:59:13 / Jan Vrany <vranyj1@fel.cvut.cz>"
!
pushLiteralVariable: object
stream nextPutAll: 'pushLiteralVariable: '.
object isVariableBinding ifTrue: [^ stream nextPutAll: object key].
object printOn: stream.
!
pushTemp: index kind: kind level: level
stream
nextPutAll: 'push ';
nextPutAll: kind;
nextPutAll: ': '.
index printOn: stream.
level == 0 ifFalse:
[stream
nextPutAll:' level: '.
level printOn: stream].
index = 0 ifTrue: [stream nextPutAll: ' "receiver"'].
index = -1 ifTrue: [stream nextPutAll: ' "thisEnv"'].
index = -2 ifTrue: [stream nextPutAll: ' "thisContext"'].
"Created: / 30-03-2009 / 14:04:20 / Jan Vrany <vranyj1@fel.cvut.cz>"
!
remoteReturn
stream nextPutAll: 'remoteReturn'.
!
returnTop
stream nextPutAll: 'returnTop'.
!
send: selector numArgs: numArgs
stream
nextPutAll: 'send: ';
nextPutAll: selector storeString.
stream nextPutAll: ' numArgs: '.
numArgs printOn: stream.
"Created: / 01-12-2008 / 19:41:52 / Jan Vrany <vranyj1@fel.cvut.cz>"
"Modified: / 30-03-2009 / 18:43:26 / Jan Vrany <vranyj1@fel.cvut.cz>"
!
send: selector numArgs: numArgs toSuperOf: behavior
stream
nextPutAll: 'send: ';
nextPutAll: selector storeString.
stream nextPutAll: ' numArgs: '.
numArgs printOn: stream.
stream nextPutAll: ' toSuperOf: '.
behavior printOn: stream.
"Created: / 01-12-2008 / 19:46:28 / Jan Vrany <vranyj1@fel.cvut.cz>"
"Modified: / 30-03-2009 / 18:44:04 / Jan Vrany <vranyj1@fel.cvut.cz>"
!
storeIntoLiteralVariable: name
stream
nextPutAll: 'storeLiteralVariable: ';
nextPutAll: name
"Created: / 11-05-2009 / 22:39:23 / Jan Vrany <vranyj1@fel.cvut.cz>"
!
storeTemp: index kind: kind level: level
stream
nextPutAll: 'store ';
nextPutAll: kind;
nextPutAll: ': '.
index printOn: stream.
level == 0 ifFalse:
[stream
nextPutAll:' level: '.
level printOn: stream].
index = -1 ifTrue: [stream nextPutAll: ' "thisEnv"'].
"Created: / 30-03-2009 / 14:05:10 / Jan Vrany <vranyj1@fel.cvut.cz>"
! !
!IRPrinter methodsFor:'interpret'!
interpretInstruction: irInstruction
indent timesRepeat: [stream tab].
super interpretInstruction: irInstruction.
stream cr.
! !
!IRPrinter class methodsFor:'documentation'!
version
^ '$Id$'
!
version_CVS
^ '§Header: /cvs/stx/cvut/stx/goodies/newcompiler/IRPrinter.st,v 1.3 2009/10/08 12:00:24 fm Exp §'
!
version_SVN
^ '$Id:: $'
! !