A new IRLine pseudoinstruction added to include debugging info into the bytecode.
See IRBuilderTests for examples.
"{ Package: 'stx:goodies/newcompiler' }"
Object subclass:#IRInterpreter
instanceVariableNames:''
classVariableNames:''
poolDictionaries:''
category:'NewCompiler-IR'
!
IRInterpreter comment:'I visit each IRInstruction in an IRMethod in order. Each instruction sends its instruction message to me upon being visited. See my ''instructions'' method category for complete list of instructions. Subclasses should override them.'
!
!IRInterpreter methodsFor:'instructions'!
blockReturnTop
!
goto: seqNum
!
if: bool goto: seqNum1 otherwise: seqNum2
!
jumpOverBlock: blockSeq to: dest
!
label: seqNum
!
line: line
"Created: / 02-12-2008 / 09:00:27 / Jan Vrany <vranyj1@fel.cvut.cz>"
!
popTop
!
pushBlock: irMethod
!
pushBlockMethod: irMethod
!
pushDup
!
pushInstVar: aSmallInteger
!
pushLiteral: object
!
pushLiteralVariable: object
!
pushTemp: index
!
remoteReturn
!
returnTop
!
send: selector numArgs: numArgs
"Created: / 01-12-2008 / 19:40:01 / Jan Vrany <vranyj1@fel.cvut.cz>"
!
send: selector numArgs: numArgs toSuperOf: behavior
"Modified: / 01-12-2008 / 19:45:19 / Jan Vrany <vranyj1@fel.cvut.cz>"
!
storeLiteralVariable: index
!
storeTemp: index
! !
!IRInterpreter methodsFor:'interpret'!
interpret: ir
self interpretAll: ir allSequences
!
interpretAll: irSequences
irSequences do: [:seq | self interpretSequence: seq]
!
interpretInstruction: irInstruction
irInstruction executeOn: self
!
interpretSequence: instructionSequence
self label: instructionSequence orderNumber.
instructionSequence do: [:instr | self interpretInstruction: instr].
! !
!IRInterpreter class methodsFor:'documentation'!
version
^'$Id$'
! !