--- 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