"{ Package: 'cvut:stx/goodies/newcompiler' }"
TestCase subclass:#IRBuilderTest
instanceVariableNames:''
classVariableNames:'TestToPush'
poolDictionaries:''
category:'NewCompiler-IR-Tests'
!
!IRBuilderTest class methodsFor:'as yet unclassified'!
testToPush
^TestToPush
!
testToPush: anObject
TestToPush := anObject
! !
!IRBuilderTest methodsFor:'mock methods'!
mock1: arg1 with: arg2
^arg1 + arg2
"Created: / 02-12-2008 / 09:11:46 / Jan Vrany <vranyj1@fel.cvut.cz>"
!
mock2
^[ testSelector ]
"
decompiling IRBuilderTest>>mock2
nA: 0 nV: 0 nT: 2
1: 37 04 00 00 makeBlock 4 (7) nv=0 na=0
5: 5A pushInstVar1
6: 00 retTop
7: 08 03 LINE[3]
9: 00 retTop
"
"Created: / 28-03-2009 / 18:47:17 / Jan Vrany <vranyj1@fel.cvut.cz>"
"Modified: / 28-03-2009 / 20:16:08 / Jan Vrany <vranyj1@fel.cvut.cz>"
!
mock3
| b |
b := 1.
^[ b ]
"
decompiling IRBuilderTest>>mock3
nA: 0 nV: 1 nT: 2
1: 79 push1
2: 64 storeMethodVar1
3: 37 04 00 00 makeBlock 4 (9) nv=0 na=0
7: 50 pushMethodVar1
8: 00 retTop
9: 08 04 LINE[4]
11:00 retTop
"
"Created: / 28-03-2009 / 20:16:36 / Jan Vrany <vranyj1@fel.cvut.cz>"
!
mock4
^[:arg| arg ]
"
decompiling IRBuilderTest>>mock4
nA: 0 nV: 0 nT: 2
1: 37 04 00 01 makeBlock 4 (7) nv=0 na=1
5: 8C pushBlockArg1
6: 00 retTop
7: 08 03 LINE[3]
9: 00 retTop
"
"Created: / 28-03-2009 / 20:18:32 / Jan Vrany <vranyj1@fel.cvut.cz>"
!
mock5
^[|temp| temp ]
"
decompiling IRBuilderTest>>mock5
nA: 0 nV: 0 nT: 2
1: 37 04 01 00 makeBlock 4 (7) nv=1 na=0
5: E8 pushBlockVar1
6: 00 retTop
7: 08 03 LINE[3]
9: 00 retTop
"
"Created: / 28-03-2009 / 20:19:17 / Jan Vrany <vranyj1@fel.cvut.cz>"
!
mock6
^[|temp| [ temp ] ]
"
decompiling IRBuilderTest>>mock6
nA: 0 nV: 0 nT: 3
1: 37 0B 01 00 makeBlock 11 (14) nv=1 na=0
5: 37 06 00 00 makeBlock 6 (13) nv=0 na=0
9: 80 01 01 pushOuterBlockVar 1 lvl: 1
12:00 retTop
13:00 retTop
14:08 03 LINE[3]
16:00 retTop
"
"Created: / 28-03-2009 / 20:20:06 / Jan Vrany <vranyj1@fel.cvut.cz>"
!
mock7
| b |
b := 1.
^[ ^b ]
"
decompiling IRBuilderTest>>mock7
nA: 0 nV: 1 nT: 2
1: 79 push1
2: 64 storeMethodVar1
3: 37 06 00 00 makeBlock 6 (11) nv=0 na=0
7: 50 pushMethodVar1
8: 08 04 LINE[4]
10:07 homeRetTop
11:08 04 LINE[4]
13:00 retTop
"
"Created: / 28-03-2009 / 20:21:51 / Jan Vrany <vranyj1@fel.cvut.cz>"
!
mock8
^([:arg| arg ] value: 22)
"Created: / 30-03-2009 / 19:21:48 / Jan Vrany <vranyj1@fel.cvut.cz>"
!
mock9
^[:barg1 | [:barg2 | barg2 ] value: barg1 ]
value: 22
"
decompiling IRBuilderTest>>mock9
nA: 0 nV: 0 nT: 3
1: 37 0C 00 01 makeBlock 12 (15) nv=0 na=1
5: 37 04 00 01 makeBlock 4 (11) nv=0 na=1
9: 8C pushBlockArg1
10: 00 retTop
11: 8C pushBlockArg1
12: 98 03 send1 #value:[3]
14: 00 retTop
15: 10 16 pushNum 22
17: 98 04 send1 #value:[4]
19: 08 03 LINE[3]
21: 00
"
"Created: / 11-05-2009 / 23:09:57 / Jan Vrany <vranyj1@fel.cvut.cz>"
! !
!IRBuilderTest methodsFor:'testing'!
halt
"Redefinition for testing the #send:toSuperOf:"
"Created: / 11-06-2008 / 16:08:52 / Jan Vrany <vranyj1@fel.cvut.cz>"
!
isThisEverCalled
"Redefinition for testing the #send:toSuperOf:"
!
testDup
|iRMethod aCompiledMethod|
iRMethod := (IRBuilder new)
numRargs:1;
addTemps:#( #self );
pushLiteral:3;
pushDup;
send:#'=';
returnTop;
ir.
aCompiledMethod := iRMethod compiledCode.
self assert:(aCompiledMethod isKindOf:CompiledMethod).
self
assert:((aCompiledMethod valueWithReceiver:nil arguments:#()) = true).
!
testInstVar
|aCompiledMethod irBuilder|
irBuilder := (IRBuilder new)
numRargs:1;
addTemps:#( #self );
pushInstVar:1;
pushInstVar:2;
send:#'+';
returnTop;
ir.
aCompiledMethod := irBuilder compiledCode.
self assert:(aCompiledMethod isKindOf:CompiledMethod).
self
assert:((aCompiledMethod valueWithReceiver:(3 @ 4) arguments:#()) = 7).
"Modified: / 11-06-2008 / 13:16:41 / Jan Vrany <vranyj1@fel.cvut.cz>"
!
testJumpAheadTo
|iRMethod aCompiledMethod|
iRMethod := (IRBuilder new)
numRargs:1;
addTemps:#( #self );
pushTemp:#self;
jumpAheadTo:#end;
pushLiteral:3;
jumpAheadTarget:#end;
returnTop;
ir.
aCompiledMethod := iRMethod compiledCode.
self assert:(aCompiledMethod isKindOf:CompiledMethod).
self assert:((aCompiledMethod valueWithReceiver:nil arguments:#()) = nil).
!
testJumpAheadToIf
|iRMethod aCompiledMethod|
iRMethod := (IRBuilder new)
numRargs:1;
addTemps:#( #self );
pushTemp:#self;
pushLiteral:true;
jumpAheadTo:#end if:true;
pushLiteral:3;
jumpAheadTarget:#end;
returnTop;
ir.
aCompiledMethod := iRMethod compiledCode.
self assert:(aCompiledMethod isKindOf:CompiledMethod).
self assert:((aCompiledMethod valueWithReceiver:nil arguments:#()) = nil).
!
testJumpBackTo
|iRMethod aCompiledMethod|
iRMethod := (IRBuilder new)
numRargs:1;
addTemps:#( #self );
pushTemp:#self;
pushLiteral:false;
jumpBackTarget:#begin;
jumpAheadTo:#end if:true;
pushLiteral:true;
jumpBackTo:#begin;
jumpAheadTarget:#end;
returnTop;
ir.
aCompiledMethod := iRMethod compiledCode.
self assert:(aCompiledMethod isKindOf:CompiledMethod).
self assert:((aCompiledMethod valueWithReceiver:nil arguments:#()) = nil).
!
testLine1
|iRMethod aCompiledMethod|
iRMethod := (IRBuilder new)
numRargs:1;
addTemps:#( #self );
line:5;
pushLiteral:true;
returnTop;
ir.
aCompiledMethod := iRMethod compiledCode.
self assert:(aCompiledMethod isKindOf:CompiledMethod).
self
assert:((aCompiledMethod valueWithReceiver:nil arguments:#()) = true).
"Created: / 02-12-2008 / 09:11:06 / Jan Vrany <vranyj1@fel.cvut.cz>"
!
testLine2
|iRMethod aCompiledMethod|
iRMethod := (IRBuilder new)
numRargs:1;
addTemps:#( #self );
line:5;
pushLiteral:true;
pushLiteral:false;
send:#'&';
returnTop;
ir.
aCompiledMethod := iRMethod compiledCode.
self assert:(aCompiledMethod isKindOf:CompiledMethod).
self
assert:((aCompiledMethod valueWithReceiver:nil arguments:#()) = false).
"Created: / 02-12-2008 / 09:11:42 / Jan Vrany <vranyj1@fel.cvut.cz>"
!
testLiteralArray
|iRMethod aCompiledMethod|
iRMethod := (IRBuilder new)
numRargs:1;
addTemps:#( #self );
pushLiteral:#( #test 4 #you );
returnTop;
ir.
aCompiledMethod := iRMethod compiledCode.
self assert:(aCompiledMethod isKindOf:CompiledMethod).
self assert:((aCompiledMethod valueWithReceiver:nil arguments:#())
= #( #test 4 #you )).
!
testLiteralBoolean
|iRMethod aCompiledMethod|
iRMethod := (IRBuilder new)
numRargs:1;
addTemps:#( #self );
pushLiteral:true;
returnTop;
ir.
aCompiledMethod := iRMethod compiledCode.
self assert:(aCompiledMethod isKindOf:CompiledMethod).
self
assert:((aCompiledMethod valueWithReceiver:nil arguments:#()) = true).
!
testLiteralCharacter
|iRMethod aCompiledMethod|
iRMethod := (IRBuilder new)
numRargs:1;
addTemps:#( #self );
pushLiteral:$e;
returnTop;
ir.
aCompiledMethod := iRMethod compiledCode.
self assert:(aCompiledMethod isKindOf:CompiledMethod).
self assert:((aCompiledMethod valueWithReceiver:nil arguments:#()) = $e).
!
testLiteralFloat
|iRMethod aCompiledMethod|
iRMethod := (IRBuilder new)
numRargs:1;
addTemps:#( #self );
pushLiteral:2.0;
returnTop;
ir.
aCompiledMethod := iRMethod compiledCode.
self assert:(aCompiledMethod isKindOf:CompiledMethod).
self assert:((aCompiledMethod valueWithReceiver:nil arguments:#()) = 2.0).
"Modified: / 03-11-2008 / 08:39:52 / Jan Vrany <vranyj1@fel.cvut.cz>"
!
testLiteralInteger
|iRMethod aCompiledMethod|
iRMethod := (IRBuilder new)
numRargs:1;
addTemps:#( #self );
pushLiteral:2;
returnTop;
ir.
aCompiledMethod := iRMethod compiledCode.
self assert:(aCompiledMethod isKindOf:CompiledMethod).
self assert:((aCompiledMethod valueWithReceiver:nil arguments:#()) = 2).
!
testLiteralNil
|iRMethod aCompiledMethod|
iRMethod := (IRBuilder new)
numRargs:1;
addTemps:#( #self );
pushLiteral:nil;
returnTop;
ir.
aCompiledMethod := iRMethod compiledCode.
self assert:(aCompiledMethod isKindOf:CompiledMethod).
self assert:((aCompiledMethod valueWithReceiver:4 arguments:#()) = nil).
!
testLiteralString
|iRMethod aCompiledMethod|
iRMethod := (IRBuilder new)
numRargs:1;
addTemps:#( #self );
pushLiteral:'hello';
returnTop;
ir.
aCompiledMethod := iRMethod compiledCode.
self assert:(aCompiledMethod isKindOf:CompiledMethod).
self
assert:((aCompiledMethod valueWithReceiver:nil arguments:#()) = 'hello').
!
testLiteralSymbole
|iRMethod aCompiledMethod|
iRMethod := (IRBuilder new)
numRargs:1;
addTemps:#( #self );
pushLiteral:#you;
returnTop;
ir.
aCompiledMethod := iRMethod compiledCode.
self assert:(aCompiledMethod isKindOf:CompiledMethod).
self
assert:((aCompiledMethod valueWithReceiver:nil arguments:#()) = #you).
!
testLiteralVariableClass
|iRMethod aCompiledMethod|
iRMethod := (IRBuilder new)
numRargs:1;
addTemps:#( #self );
pushLiteralVariable:Object binding;
returnTop;
ir.
aCompiledMethod := iRMethod compiledCode.
self assert:(aCompiledMethod isKindOf:CompiledMethod).
self
assert:((aCompiledMethod valueWithReceiver:nil arguments:#()) = Object).
!
testLiteralVariableClassVariable
|iRMethod aCompiledMethod|
iRMethod := (IRBuilder new)
numRargs:1;
addTemps:#( #self );
pushLiteralVariable:(ArithmeticValue bindingOf:#ArithmeticSignal);
returnTop;
ir.
aCompiledMethod := iRMethod compiledCode.
self assert:(aCompiledMethod isKindOf:CompiledMethod).
self assert:((aCompiledMethod valueWithReceiver:nil arguments:#())
= ArithmeticValue arithmeticSignal).
"Modified: / 11-06-2008 / 11:31:32 / Jan Vrany <vranyj1@fel.cvut.cz>"
!
testLiteralVariableGlobale
|iRMethod aCompiledMethod|
iRMethod := (IRBuilder new)
numRargs:1;
addTemps:#( #self );
pushLiteralVariable:Smalltalk binding;
returnTop;
ir.
aCompiledMethod := iRMethod compiledCode.
self assert:(aCompiledMethod isKindOf:CompiledMethod).
self
assert:((aCompiledMethod valueWithReceiver:nil arguments:#()) = Smalltalk).
"Modified: / 11-06-2008 / 11:32:07 / Jan Vrany <vranyj1@fel.cvut.cz>"
!
testPopTop
|iRMethod aCompiledMethod|
iRMethod := (IRBuilder new)
numRargs:1;
addTemps:#( #self );
pushLiteral:true;
pushLiteral:false;
popTop;
returnTop;
ir.
aCompiledMethod := iRMethod compiledCode.
self assert:(aCompiledMethod isKindOf:CompiledMethod).
self
assert:((aCompiledMethod valueWithReceiver:nil arguments:#()) = true).
"Modified: / 11-06-2008 / 13:22:11 / Jan Vrany <vranyj1@fel.cvut.cz>"
!
testPushReceiver
|iRMethod aCompiledMethod receiver|
iRMethod := (IRBuilder new)
numRargs:1;
addTemps:#( #self );
pushReceiver;
returnTop;
ir.
aCompiledMethod := iRMethod compiledCode.
receiver := (5 @ 8).
self assert:(aCompiledMethod isKindOf:CompiledMethod).
self assert:((aCompiledMethod valueWithReceiver:receiver arguments:#())
== receiver).
!
testPushTempArgument
|iRMethod aCompiledMethod|
iRMethod := (IRBuilder new)
numRargs:3;
addTemps:#( #self #a #b );
pushTemp:#a;
pushTemp:#b;
send:#'+';
returnTop;
ir.
aCompiledMethod := iRMethod compiledCode.
self assert:(aCompiledMethod isKindOf:CompiledMethod).
self
assert:((aCompiledMethod valueWithReceiver:nil arguments:#( 2 8 )) = 10).
!
testPushTempSelf
|iRMethod aCompiledMethod|
iRMethod := (IRBuilder new)
numRargs:1;
addTemps:#( #self );
pushTemp:#self;
send:#class;
returnTop;
ir.
aCompiledMethod := iRMethod compiledCode.
self assert:(aCompiledMethod isKindOf:CompiledMethod).
self assert:((aCompiledMethod valueWithReceiver:nil arguments:#())
== UndefinedObject).
!
testPushTempTemp
|iRMethod aCompiledMethod|
iRMethod := (IRBuilder new)
numRargs:1;
addTemps:#( #self #a );
pushTemp:#a;
returnTop;
ir.
aCompiledMethod := iRMethod compiledCode.
self assert:(aCompiledMethod isKindOf:CompiledMethod).
self assert:((aCompiledMethod valueWithReceiver:5 arguments:#()) = nil).
!
testPushThisContext
|iRMethod aCompiledMethod|
iRMethod := (IRBuilder new)
numRargs:1;
addTemps:#( #self #a );
pushThisContext;
send:#receiver;
returnTop;
ir.
aCompiledMethod := iRMethod compiledCode.
self assert:(aCompiledMethod isKindOf:CompiledMethod).
self assert:((aCompiledMethod valueWithReceiver:5 arguments:#()) = 5).
!
testPushThisEnv
|iRMethod aCompiledMethod receiver|
^ self.
iRMethod := (IRBuilder new)
numRargs:1;
addTemps:#( #self );
pushThisContext;
pushLiteral:5;
pushLiteral:ClosureEnvironment;
pushLiteral:1;
send:#new:;
send:#privSetInstVar:put:;
pushThisEnv;
returnTop;
ir.
aCompiledMethod := iRMethod compiledCode.
receiver := Object new.
self assert:(aCompiledMethod isKindOf:CompiledMethod).
self assert:((aCompiledMethod valueWithReceiver:receiver arguments:#())
isKindOf:ClosureEnvironment)
!
testSendNumArgs1
|iRMethod aCompiledMethod|
iRMethod := (IRBuilder new)
numRargs:1;
addTemps:#( #self );
pushReceiver;
pushLiteral:1;
pushLiteral:2;
send:#mock1 numArgs:2;
returnTop;
ir.
aCompiledMethod := iRMethod compiledCode.
self class basicAddSelector:#mock1
withMethod:(self class >> #mock1:with:).
self assert:(aCompiledMethod isKindOf:CompiledMethod).
self
assert:(aCompiledMethod valueWithReceiver:(IRBuilderTest new)
arguments:#()) = 3.
self class basicRemoveSelector:#mock1.
"Created: / 01-12-2008 / 19:58:18 / Jan Vrany <vranyj1@fel.cvut.cz>"
!
testSendNumArgs2
|iRMethod aCompiledMethod|
iRMethod := (IRBuilder new)
numRargs:1;
addTemps:#( #self );
pushReceiver;
pushLiteral:1;
send:#mock1 numArgs:1;
returnTop;
ir.
aCompiledMethod := iRMethod compiledCode.
self class basicAddSelector:#mock1
withMethod:(self class >> #mock1:with:).
self assert:(aCompiledMethod isKindOf:CompiledMethod).
self
should:[
(aCompiledMethod valueWithReceiver:(IRBuilderTest new) arguments:#())
]
raise:Error.
self class basicRemoveSelector:#mock1.
"Created: / 01-12-2008 / 19:59:02 / Jan Vrany <vranyj1@fel.cvut.cz>"
!
testSendSuper
|iRMethod aCompiledMethod|
iRMethod := (IRBuilder new)
numRargs:1;
addTemps:#( #self );
pushReceiver;
send:#halt toSuperOf:IRBuilderTest;
returnTop;
ir.
aCompiledMethod := iRMethod compiledCode.
self assert:(aCompiledMethod isKindOf:CompiledMethod).
self
should:[
(aCompiledMethod valueWithReceiver:(IRBuilderTest new) arguments:#())
]
raise:Error.
"Modified: / 11-06-2008 / 16:09:12 / Jan Vrany <vranyj1@fel.cvut.cz>"
!
testStorIntoVariable
|iRMethod aCompiledMethod|
iRMethod := (IRBuilder new)
numRargs:1;
addTemps:#( #self );
pushLiteral:4;
storeIntoLiteralVariable:(IRBuilderTest bindingOf:#TestToPush);
returnTop;
ir.
aCompiledMethod := iRMethod compiledCode.
self assert:(aCompiledMethod isKindOf:CompiledMethod).
aCompiledMethod valueWithReceiver:nil arguments:#().
self assert:(IRBuilderTest testToPush = 4).
IRBuilderTest testToPush:nil.
!
testStoreTemp
|iRMethod aCompiledMethod|
iRMethod := (IRBuilder new)
numRargs:1;
addTemps:#( #self #a );
pushLiteral:34;
storeTemp:#a;
pushTemp:#a;
returnTop;
ir.
aCompiledMethod := iRMethod compiledCode.
self assert:(aCompiledMethod isKindOf:CompiledMethod).
self assert:((aCompiledMethod valueWithReceiver:nil arguments:#()) = 34).
"Modified: / 11-06-2008 / 16:24:43 / Jan Vrany <vranyj1@fel.cvut.cz>"
!
testStoreThisEnv
|iRMethod aCompiledMethod|
^ self.
iRMethod := (IRBuilder new)
numRargs:1;
addTemps:#( #self #a );
pushLiteral:ClosureEnvironment;
pushLiteral:1;
send:#new:;
storeThisEnv;
pushThisContext;
pushLiteral:5;
send:#privGetInstVar:;
returnTop;
ir.
aCompiledMethod := iRMethod compiledCode.
self assert:(aCompiledMethod isKindOf:CompiledMethod).
self assert:((aCompiledMethod valueWithReceiver:nil arguments:#())
isKindOf:ClosureEnvironment).
"Modified: / 11-06-2008 / 14:47:51 / Jan Vrany <vranyj1@fel.cvut.cz>"
!
testTwoJumpAheadToIfsToSameTarget
|iRMethod aCompiledMethod|
iRMethod := (IRBuilder new)
numRargs:1;
addTemps:#( #self );
pushTemp:#self;
pushLiteral:false;
jumpAheadTo:#end if:true;
pushLiteral:true;
jumpAheadTo:#end if:true;
pushLiteral:3;
jumpAheadTarget:#end;
returnTop;
ir.
aCompiledMethod := iRMethod compiledCode.
self assert:(aCompiledMethod isKindOf:CompiledMethod).
self assert:((aCompiledMethod valueWithReceiver:nil arguments:#()) = nil).
"Created: / 03-11-2008 / 13:34:50 / Jan Vrany <vranyj1@fel.cvut.cz>"
! !
!IRBuilderTest methodsFor:'testing - blocks'!
testBlock_blockNesting_1
|aCompiledMethod irBuilder|
irBuilder := (IRBuilder new)
numRargs:1;
addTemps:#( #self );
pushBlockUsingBuilder:[:builder |
builder
numRargs:1;
addTemps:#( #barg1 );
pushBlockUsingBuilder:[:builder|
builder
numRargs: 1;
addTemps: #( #barg2 );
pushTemp: #barg2;
returnTop
];
pushTemp: #barg1;
send: #value:;
returnTop
];
pushLiteral: 22;
send:#value;
returnTop;
ir.
"
irBuilder ir
"
aCompiledMethod := irBuilder compiledCode.
self assert:(aCompiledMethod isKindOf:CompiledMethod).
self assert:((aCompiledMethod valueWithReceiver:1 arguments:#()) = 22).
"Created: / 11-05-2009 / 23:04:13 / Jan Vrany <vranyj1@fel.cvut.cz>"
!
testBlock_blockTempArg
|aCompiledMethod irBuilder|
irBuilder := (IRBuilder new)
numRargs:1;
addTemps:#( #self );
pushBlockUsingBuilder:[:builder |
builder
numRargs:1;
addTemps:#( #barg1 );
pushTemp:#barg1;
returnTop
];
pushLiteral:22;
send:#value:;
returnTop;
ir.
"
irBuilder ir
"
aCompiledMethod := irBuilder compiledCode.
self assert:(aCompiledMethod isKindOf:CompiledMethod).
self assert:((aCompiledMethod valueWithReceiver:1 arguments:#()) = 22).
"Created: / 30-03-2009 / 14:26:18 / Jan Vrany <vranyj1@fel.cvut.cz>"
"Modified: / 30-03-2009 / 19:16:25 / Jan Vrany <vranyj1@fel.cvut.cz>"
!
testBlock_blockTempVar
|aCompiledMethod irBuilder|
irBuilder := (IRBuilder new)
numRargs:1;
addTemps:#( #self );
pushBlockUsingBuilder:[:builder |
builder
numRargs:0;
addTemps:#( #bvar1 );
pushLiteral: 22;
storeTemp:#bvar1;
pushTemp: #bvar1;
returnTop
];
send:#value;
returnTop;
ir.
"
irBuilder ir
"
aCompiledMethod := irBuilder compiledCode.
self assert:(aCompiledMethod isKindOf:CompiledMethod).
self assert:((aCompiledMethod valueWithReceiver:1 arguments:#()) = 22).
"Created: / 30-03-2009 / 23:03:48 / Jan Vrany <vranyj1@fel.cvut.cz>"
!
testBlock_block_in_another_basic_block
|aCompiledMethod irBuilder|
irBuilder := (IRBuilder new)
numRargs:1;
addTemps:#( #self );
pushLiteral: false;
pushLiteral: true;
jumpAheadTo: #end if: false;
pushBlockUsingBuilder:[:builder |
builder
numRargs: 0;
pushLiteral: true;
returnTop
];
send: #value;
jumpAheadTarget: #end;
returnTop;
ir.
"
irBuilder ir
"
aCompiledMethod := irBuilder compiledCode.
self assert:(aCompiledMethod isKindOf:CompiledMethod).
self assert:((aCompiledMethod valueWithReceiver:1 arguments:#()) = true).
"Created: / 13-05-2009 / 11:24:48 / Jan Vrany <vranyj1@fel.cvut.cz>"
!
testBlock_exceptionHandler
|aCompiledMethod irBuilder|
irBuilder := (IRBuilder new)
numRargs:1;
addTemps:#( #self);
pushBlockUsingBuilder:[:builder |
builder
numRargs:0;
pushLiteral: 1;
pushLiteral: 0;
send: #/;
pushLiteral: false;
remoteReturn
];
pushLiteralVariable: #Error;
pushBlockUsingBuilder:[:builder|
builder
numRargs:0;
pushLiteral: true;
remoteReturn];
send: #on:do:;
pushLiteral: false;
returnTop;
ir.
"
irBuilder ir
"
aCompiledMethod := irBuilder compiledCode.
self assert:(aCompiledMethod isKindOf:CompiledMethod).
self assert:((aCompiledMethod valueWithReceiver:1 arguments:#()) = true).
"Created: / 11-05-2009 / 21:53:19 / Jan Vrany <vranyj1@fel.cvut.cz>"
!
testBlock_exceptionHandler_noRemoteReturn
|aCompiledMethod irBuilder|
irBuilder := (IRBuilder new)
numRargs:1;
addTemps:#( #self);
pushBlockUsingBuilder:[:builder |
builder
numRargs:0;
pushLiteral: 1;
pushLiteral: 0;
send: #/;
pushLiteral: false;
returnTop
];
pushLiteralVariable: #Error;
pushBlockUsingBuilder:[:builder|
builder
numRargs:0;
pushLiteral: true;
returnTop];
send: #on:do:;
returnTop;
ir.
"
irBuilder ir
"
aCompiledMethod := irBuilder compiledCode.
self assert:(aCompiledMethod isKindOf:CompiledMethod).
self assert:((aCompiledMethod valueWithReceiver:1 arguments:#()) = true).
"Created: / 11-05-2009 / 21:53:25 / Jan Vrany <vranyj1@fel.cvut.cz>"
!
testBlock_invalid_instruction_ordering_bug_1
|aCompiledMethod irBuilder|
irBuilder := (IRBuilder new)
numRargs: 1;
addTemps: #(self i);
pushTemp: #i;
pushLiteral: 3;
pushReceiver;
pushBlockUsingBuilder: [ :builder |
builder
numRargs: 0;
addTemps: #();
pushTemp: #i;
returnTop.
];
returnTop;
ir.
"
irBuilder ir
"
aCompiledMethod := irBuilder compiledCode.
self assert:(aCompiledMethod isKindOf:CompiledMethod).
self assert:((aCompiledMethod valueWithReceiver:1 arguments:#()) isKindOf: Block).
"Created: / 11-05-2009 / 21:55:30 / Jan Vrany <vranyj1@fel.cvut.cz>"
!
testBlock_methodTempVar
|aCompiledMethod irBuilder|
irBuilder := (IRBuilder new)
numRargs:1;
addTemps:#( #self #a);
pushLiteral: 22;
storeTemp: #a;
pushBlockUsingBuilder:[:builder |
builder
numRargs:0;
pushTemp: #a;
returnTop
];
send:#value;
returnTop;
ir.
"
irBuilder ir
"
aCompiledMethod := irBuilder compiledCode.
self assert:(aCompiledMethod isKindOf:CompiledMethod).
self assert:((aCompiledMethod valueWithReceiver:1 arguments:#()) = 22).
"Created: / 30-03-2009 / 23:05:00 / Jan Vrany <vranyj1@fel.cvut.cz>"
"Modified: / 01-04-2009 / 19:43:52 / Jan Vrany <vranyj1@fel.cvut.cz>"
! !
!IRBuilderTest class methodsFor:'documentation'!
version
^ '$Header: /cvs/stx/cvut/stx/goodies/newcompiler/IRBuilderTest.st,v 1.3 2009/10/08 12:03:51 fm Exp $'
!
version_CVS
^ '$Header: /cvs/stx/cvut/stx/goodies/newcompiler/IRBuilderTest.st,v 1.3 2009/10/08 12:03:51 fm Exp $'
!
version_SVN
^ '$Id$'
! !