IRTranslator.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Wed, 11 Jun 2008 14:54:42 +0000
changeset 1 0dd36941955f
child 2 6e1de7f85d59
permissions -rw-r--r--
Initial revision. All tests pass.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
"{ Package: 'stx:goodies/newcompiler' }"
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
IRInterpreter subclass:#IRTranslator
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
	instanceVariableNames:'pending gen currentInstr trailerBytes'
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
	classVariableNames:''
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
	poolDictionaries:''
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
	category:'NewCompiler-IR'
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
IRTranslator comment:'I interpret IRMethod instructions, sending the appropriate bytecode messages to my BytecodeGenerator (gen).  I hold some messages back in pending awaiting certain sequences of them that can be consolidated into single bytecode instructions, otherwise the pending messages are executed in order as if they were executed when they first appeared.'
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
!IRTranslator class methodsFor:'instance creation'!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
new
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
    ^ self basicNew initialize.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
    "Created: / 11-06-2008 / 09:24:01 / Jan Vrany <vranyj1@fel.cvut.cz>"
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
! !
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
!IRTranslator methodsFor:'initialization'!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
initialize
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
    "Invoked when a new instance is created."
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
    "/ please change as required (and remove this comment)
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
    pending := OrderedCollection new.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
    gen := IRBytecodeGenerator new.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
    "/ currentInstr := nil.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
    "/ trailerBytes := nil.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
    "/ super initialize.   -- commented since inherited method does nothing
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
    "Created: / 11-06-2008 / 13:46:17 / Jan Vrany <vranyj1@fel.cvut.cz>"
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
! !
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    37
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
!IRTranslator methodsFor:'instructions'!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
addLiteral: literal
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
	gen addLiteral: literal.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
blockReturnTop
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
	self doPending.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
	gen blockReturnTop.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    48
!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
goto: seqNum
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
	self doPending.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    53
	gen goto: seqNum.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    55
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    56
if: bool goto: seqNum1 otherwise: seqNum2
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    57
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    58
	self doPending.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    59
	gen if: bool goto: seqNum1 otherwise: seqNum2.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
jumpOverBlock:  blockNum to: seqNum
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    63
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    64
	self doPending.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
	gen jumpOverBlock: seqNum.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    66
!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    67
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
label: seqNum
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    69
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    70
        pending := OrderedCollection new.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    71
        gen label: seqNum.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    72
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    73
    "Modified: / 11-06-2008 / 10:13:28 / Jan Vrany <vranyj1@fel.cvut.cz>"
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    74
!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    75
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    76
popTop
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    77
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    78
	"if last was storeTemp,  storeInstVar storeIntoLiteralVariable then convert to storePopTemp, storePopInstVar storePopIntoLiteralVariable"
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    79
	#storeTemp: == self pendingSelector ifTrue: [
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    80
		^ self pendingSelector: #storePopTemp:].
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    81
	#storeInstVar: == self pendingSelector ifTrue: [
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    82
		^ self pendingSelector: #storePopInstVar:].
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    83
	#storeIntoLiteralVariable: == self pendingSelector ifTrue:[
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    84
		^self pendingSelector: #storePopIntoLiteralVariable:].
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    85
	"otherwise do normal pop"
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    86
	self doPending.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    87
	gen popTop.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    88
!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    89
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
pushBlock: irMethod
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    91
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
	| meth block |
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
	meth _ irMethod compiledMethodWith: trailerBytes.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    94
	meth isBlockMethod: true.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    95
	block _ meth createBlock: nil.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    96
	self addPending: (Message selector: #pushLiteral: argument: block)
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    97
!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    98
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    99
pushBlockMethod: irMethod
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   100
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   101
	| meth |
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   102
	meth _ irMethod compiledMethodWith: trailerBytes.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   103
	meth isBlockMethod: true.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   104
	self addPending: (Message selector: #pushLiteral: argument: meth)
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   105
!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   106
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   107
pushDup
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   108
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   109
	self doPending.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   110
	gen pushDup.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   111
!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   112
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   113
pushInstVar: index
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   114
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   115
	"self doPending.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   116
	gen pushInstVar: index."
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   117
	self addPending: (Message selector: #pushInstVar: argument: index)
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   118
!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   119
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   120
pushLiteral: object
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   121
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   122
	self addPending: (Message selector: #pushLiteral: argument: object)
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   123
!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   124
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   125
pushLiteralVariable: object
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   126
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   127
	self addPending: (Message selector: #pushLiteralVariable: argument: object)
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   128
!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   129
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   130
pushTemp: index
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   131
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   132
	index = 0 ifTrue: [^ self addPending: (Message selector: #pushReceiver)].
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   133
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   134
	(self pendingMatches: {
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   135
		[:m | m selector == #storePopTemp: and: [m argument = index]]}
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   136
		) ifTrue: [^ self pendingSelector: #storeTemp:].
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   137
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   138
	self doPending.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   139
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   140
	index = -2 ifTrue: [^ gen pushThisContext].
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   141
	index = -1 ifTrue: [
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   142
		^ gen pushThisContext;
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   143
			pushLiteral: MethodContext myEnvFieldIndex;
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   144
			send: #privGetInstVar:].
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   145
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   146
	gen pushTemp: index.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   147
!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   148
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   149
remoteReturn
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   150
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   151
	self doPending.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   152
	gen remoteReturn.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   153
!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   154
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   155
returnTop
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   156
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   157
	#pushReceiver == self pendingSelector ifTrue: [
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   158
		self pendingSelector: #returnReceiver.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   159
		^ self doPending
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   160
	].
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   161
	#pushLiteral: == self pendingSelector ifTrue: [
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   162
		self pendingSelector: #returnConstant:.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   163
		^ self doPending
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   164
	].
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   165
	#pushInstVar: == self pendingSelector ifTrue: [
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   166
		self pendingSelector: #returnInstVar:.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   167
		^ self doPending
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   168
	].
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   169
	self doPending.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   170
	gen returnTop.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   171
!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   172
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   173
send: selector
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   174
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   175
	"If get/set inst var, access it directly"
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   176
	| index |
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   177
	
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   178
	((#(privGetInstVar: #privStoreIn:instVar:) identityIncludes: selector) and:
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   179
	 [self pendingMatches: {
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   180
		[:m | m selector == #pushReceiver].
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   181
		[:m | m selector == #pushLiteral: and: [m argument isInteger]]}]
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   182
	) ifTrue: [
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   183
		index _ self popPending argument.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   184
		self popPending.  "pop pushReceiver"
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   185
		self addPending: (Message
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   186
			selector: (selector == #privGetInstVar:
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   187
				ifTrue: [#pushInstVar:] ifFalse: [#storeInstVar:])
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   188
			argument: index).
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   189
		(self pendingMatches: {
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   190
			[:m | m selector == #storePopInstVar: and: [m argument = index]].
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   191
			[:m | m selector == #pushInstVar: and: [m argument = index]]}
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   192
		) ifTrue: [
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   193
			self popPending.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   194
			self pendingSelector: #storeInstVar:.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   195
		].
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   196
		^ self
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   197
	].
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   198
	"otherwise do normal send"
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   199
	self doPending.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   200
	gen send: selector.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   201
!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   202
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   203
send: selector toSuperOf: behavior
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   204
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   205
	self doPending.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   206
	gen send: selector toSuperOf: behavior.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   207
!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   208
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   209
storeInstVar: index 
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   210
	"self doPending.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   211
	gen storeInstVar: index"
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   212
	self addPending: (Message selector: #storeInstVar: argument: index)
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   213
!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   214
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   215
storeIntoLiteralVariable: assoc
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   216
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   217
	"self doPending.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   218
	gen storeIntoLiteralVariable: assoc."
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   219
	
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   220
	self addPending: (Message selector: #storeIntoLiteralVariable: argument: assoc)
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   221
!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   222
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   223
storeTemp: index
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   224
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   225
	index = -1 "thisEnv" ifTrue: [
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   226
		self doPending.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   227
		^ gen pushThisContext;
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   228
			pushLiteral: MethodContext myEnvFieldIndex;
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   229
			send: #privStoreIn:instVar:].
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   230
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   231
	self addPending: (Message selector: #storeTemp: argument: index)
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   232
! !
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   233
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   234
!IRTranslator methodsFor:'interpret'!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   235
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   236
interpret: ir
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   237
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   238
        ir optimize.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   239
        gen numArgs: ir numArgs.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   240
        ir additionalLiterals do: [:lit | gen addLiteral: lit].
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   241
        super interpret: ir.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   242
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   243
    "Modified: / 11-06-2008 / 13:52:20 / Jan Vrany <vranyj1@fel.cvut.cz>"
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   244
!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   245
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   246
interpretAll: irSequences
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   247
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   248
	irSequences withIndexDo: [:seq :i | seq orderNumber: i].
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   249
	super interpretAll: irSequences.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   250
!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   251
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   252
interpretInstruction: irInstruction
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   253
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   254
        currentInstr := irInstruction.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   255
        super interpretInstruction: irInstruction.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   256
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   257
    "Modified: / 11-06-2008 / 09:20:30 / Jan Vrany <vranyj1@fel.cvut.cz>"
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   258
! !
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   259
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   260
!IRTranslator methodsFor:'priv pending'!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   261
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   262
addPending: message
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   263
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   264
	pending addLast: currentInstr -> message
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   265
!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   266
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   267
doPending
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   268
	"execute pending instructions"
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   269
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   270
	| assoc |
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   271
	[pending isEmpty] whileFalse: [
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   272
		assoc _ pending removeFirst.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   273
		gen mapBytesTo: assoc key "instr".
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   274
		assoc value "message" sendTo: gen.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   275
	].
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   276
	gen mapBytesTo: currentInstr.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   277
!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   278
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   279
pendingMatches: blocks
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   280
	"Return true if each message at end of pending list satisfies its corresponding block.  The number of elements tested equals the number of blocks.  If not enough elements return false"
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   281
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   282
	| messages i |
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   283
	messages _ pending collect: [:assoc | assoc value].
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   284
	blocks size > messages size ifTrue: [^ false].
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   285
	i _ messages size - blocks size.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   286
	blocks do: [:b |
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   287
		(b value: (messages at: (i _ i + 1))) ifFalse: [^ false].
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   288
	].
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   289
	^ true
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   290
!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   291
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   292
pendingSelector
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   293
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   294
	pending isEmpty ifTrue: [^ nil].
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   295
	^ pending last value "message" selector
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   296
!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   297
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   298
pendingSelector: selector
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   299
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   300
	pending last value "message" setSelector: selector
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   301
!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   302
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   303
popPending
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   304
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   305
	^ pending removeLast value "message"
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   306
! !
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   307
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   308
!IRTranslator methodsFor:'private - literals'!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   309
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   310
indexOfLiteral: object
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   311
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   312
    | idx | 
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   313
    idx := literalFrame identityIndexOf: object.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   314
    idx = 0 ifTrue:
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   315
        [literalFrame add: object.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   316
        idx := literalFrame identityIndexOf: object].
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   317
    ^idx
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   318
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   319
    "Created: / 11-06-2008 / 10:56:24 / Jan Vrany <vranyj1@fel.cvut.cz>"
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   320
! !
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   321
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   322
!IRTranslator methodsFor:'results'!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   323
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   324
compiledMethod
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   325
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   326
	^ gen compiledMethodWith: trailerBytes
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   327
!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   328
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   329
compiledMethodUsing: aCompiledMethodClass
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   330
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   331
        ^ gen compiledMethodUsing: aCompiledMethodClass
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   332
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   333
    "Modified: / 11-06-2008 / 14:08:02 / Jan Vrany <vranyj1@fel.cvut.cz>"
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   334
! !
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   335
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   336
!IRTranslator class methodsFor:'documentation'!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   337
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   338
version
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   339
    ^'$Id$'
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   340
! !