IRInterpreter.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Mon, 01 Dec 2008 19:01:08 +0000
changeset 5 b94aea1d3710
parent 1 0dd36941955f
child 6 49a61123c743
permissions -rw-r--r--
Added method IRBuilder>>#send:numArgs and IRBuilder>>#send:numArgs:toSuperOf:. Those methods will be used by the Ruby compiler

"{ 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
!

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$'
! !