Author: Lars Wassermann <lars.wasserm...@gmail.com>
Branch: 
Changeset: r65:ab075701b725
Date: 2013-02-20 12:00 +0100
http://bitbucket.org/pypy/lang-smalltalk/changeset/ab075701b725/

Log:    refactored pushClosureCopyCopiedValuesBytecode via MethodExtract for
        the primitive closureCopyWithCopiedValues(200)

diff --git a/spyvm/interpreter.py b/spyvm/interpreter.py
--- a/spyvm/interpreter.py
+++ b/spyvm/interpreter.py
@@ -400,6 +400,15 @@
         index_in_array, w_indirectTemps = self._extract_index_and_temps()
         w_indirectTemps.atput0(self.space, index_in_array, self.pop())
 
+    def _newClosure(self, numArgs, pc, numCopied):
+        BlockClosureShadow = 
self.space.w_BlockClosure.as_class_get_shadow(self.space)
+        w_closure = BlockClosureShadow.new(numCopied)
+        closure = wrapper.BlockClosureWrapper(self.space, w_closure)
+        closure.store_outerContext(self._w_self)
+        closure.store_startpc(pc)
+        closure.store_numArgs(numArgs)
+        return closure, w_closure
+
     def pushClosureCopyCopiedValuesBytecode(self, interp):
         """ Copied from Blogpost: 
http://www.mirandabanda.org/cogblog/2008/07/22/closures-part-ii-the-bytecodes/
         ContextPart>>pushClosureCopyNumCopiedValues: numCopied numArgs: 
numArgs blockSize: blockSize
@@ -427,12 +436,7 @@
         i = self.getbytecode()
         blockSize = (j << 8) | i
         #create new instance of BlockClosure
-        BlockClosureShadow = space.w_BlockClosure.as_class_get_shadow(space)
-        w_closure = BlockClosureShadow.new(numCopied)
-        closure = wrapper.BlockClosureWrapper(space, w_closure)
-        closure.store_outerContext(self._w_self)
-        closure.store_startpc(self.pc())
-        closure.store_numArgs(numArgs)
+        closure, w_closure = self._newClosure(numArgs, self.pc(), numCopied)
         if numCopied > 0:
             copiedValues = self.pop_and_return_n(numCopied)
             for i0 in range(numCopied):
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to