IRBytecodeGenerator.st
changeset 11 0a50d475c1ff
parent 10 0fd549e0c784
child 13 c7503f2d7d36
--- a/IRBytecodeGenerator.st	Mon Mar 30 17:49:01 2009 +0000
+++ b/IRBytecodeGenerator.st	Wed Apr 01 21:13:00 2009 +0000
@@ -39,6 +39,17 @@
     properties := aDictionary.
 
     "Created: / 17-09-2008 / 12:17:49 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
+setLiterals: aCollection
+
+    "
+        Private entry for IRBytecodeGenerator>>makeBlock:
+    "
+
+    ^literals := aCollection
+
+    "Created: / 30-03-2009 / 23:09:16 / Jan Vrany <vranyj1@fel.cvut.cz>"
 ! !
 
 !IRBytecodeGenerator methodsFor:'accessing default'!
@@ -171,26 +182,30 @@
 
 makeBlock: irClosure
 
-    | closureCode |
+    | pos translator closureCode |
 
     stack push.
 
+    pos := code size.
+
     self 
         nextPut: #makeBlock;
         nextPut: nil "Number of block bytecodes. Patched later";
         nextPut: irClosure numVars;
         nextPut: irClosure numArgs.
 
-    closureCode := (IRTranslator new)
+    translator := IRTranslator new.
+    translator getGenerator setLiterals: literals.
+    closureCode := translator
                         interpret: irClosure;
                         getCode.
+    code addAll: closureCode.
 
     "Patch number of closure bytecodes"
-    code at: code size - 2 put: (closureCode size + 5).
-    code addAll: closureCode.
+    code at: pos + 2 put: code size + 1.
 
     "Created: / 30-03-2009 / 18:16:10 / Jan Vrany <vranyj1@fel.cvut.cz>"
-    "Modified: / 30-03-2009 / 19:39:50 / Jan Vrany <vranyj1@fel.cvut.cz>"
+    "Modified: / 01-04-2009 / 19:43:22 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 popTop