Invalid intruction ordering bug fixed.
authorJan Vrany <jan.vrany@fit.cvut.cz>
Mon, 11 May 2009 20:20:05 +0000
changeset 16 f325defc9c7e
parent 15 4daeb5471d43
child 17 df6f26442169
Invalid intruction ordering bug fixed.
IRBuilderTest.st
IRTranslator.st
--- a/IRBuilderTest.st	Tue Apr 28 15:03:39 2009 +0000
+++ b/IRBuilderTest.st	Mon May 11 20:20:05 2009 +0000
@@ -797,7 +797,7 @@
     "Created: / 30-03-2009 / 23:03:48 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
-testBlock_exteptionHandler
+testBlock_exceptionHandler
     |aCompiledMethod irBuilder|
 
     irBuilder := (IRBuilder new)
@@ -830,11 +830,10 @@
     self assert:(aCompiledMethod isKindOf:CompiledMethod).
     self assert:((aCompiledMethod valueWithReceiver:1 arguments:#()) = true).
 
-    "Modified: / 01-04-2009 / 19:43:52 / Jan Vrany <vranyj1@fel.cvut.cz>"
-    "Created: / 28-04-2009 / 13:10:13 / karpij1 <karpij1@fel.cvut.cz>"
+    "Created: / 11-05-2009 / 21:53:19 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
-testBlock_exteptionHandler_noRemoteReturn
+testBlock_exceptionHandler_noRemoteReturn
     |aCompiledMethod irBuilder|
 
     irBuilder := (IRBuilder new)
@@ -866,8 +865,37 @@
     self assert:(aCompiledMethod isKindOf:CompiledMethod).
     self assert:((aCompiledMethod valueWithReceiver:1 arguments:#()) = true).
 
-    "Modified: / 01-04-2009 / 19:43:52 / Jan Vrany <vranyj1@fel.cvut.cz>"
-    "Created: / 28-04-2009 / 13:39:01 / karpij1 <karpij1@fel.cvut.cz>"
+    "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
--- a/IRTranslator.st	Tue Apr 28 15:03:39 2009 +0000
+++ b/IRTranslator.st	Mon May 11 20:20:05 2009 +0000
@@ -106,6 +106,7 @@
 
 pushBlock: irClosure
 
+    self doPending.
     gen makeBlock: irClosure
 
     "
@@ -116,7 +117,7 @@
         self addPending: (Message selector: #pushLiteral: argument: block)
     "
 
-    "Modified: / 30-03-2009 / 18:15:29 / Jan Vrany <vranyj1@fel.cvut.cz>"
+    "Modified: / 11-05-2009 / 22:13:39 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 pushDup