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