[pypy-svn] r14942 - pypy/dist/pypy/interpreter

pedronis at codespeak.net pedronis at codespeak.net
Fri Jul 22 22:55:07 CEST 2005


Author: pedronis
Date: Fri Jul 22 22:55:06 2005
New Revision: 14942

Modified:
   pypy/dist/pypy/interpreter/function.py
Log:
avoid co_freevars to be attached to eval.Code



Modified: pypy/dist/pypy/interpreter/function.py
==============================================================================
--- pypy/dist/pypy/interpreter/function.py	(original)
+++ pypy/dist/pypy/interpreter/function.py	Fri Jul 22 22:55:06 2005
@@ -150,11 +150,15 @@
         return space.wrap(self.code)
 
     def fset_func_code(space, self, w_code):
+        from pypy.interpreter.pycode import PyCode
         code = space.interpclass_w(w_code)
         if not isinstance(code, Code):
             raise OperationError(space.w_TypeError, space.wrap("func_code must be set to a code object") )
-        if len(self.code.co_freevars) != len(code.co_freevars):
-            raise OperationError(space.w_ValueError, space.wrap("%s() requires a code object with %s free vars, not %s " % (self.name, len(self.code.co_freevars), len(code.co_freevars))))
+        closure_len = 0
+        if self.closure:
+            closure_len = len(self.closure)
+        if isinstance(code, PyCode) and closure_len != len(code.co_freevars):
+            raise OperationError(space.w_ValueError, space.wrap("%s() requires a code object with %s free vars, not %s " % (self.name, closure_len, len(code.co_freevars))))
         self.code = code
 
     def fget_func_closure(space, self):



More information about the Pypy-commit mailing list