[pypy-svn] r28246 - in pypy/dist/pypy: interpreter interpreter/test module/_pickle_support
tismer at codespeak.net
tismer at codespeak.net
Sun Jun 4 13:11:49 CEST 2006
Author: tismer
Date: Sun Jun 4 13:11:48 2006
New Revision: 28246
Modified:
pypy/dist/pypy/interpreter/generator.py
pypy/dist/pypy/interpreter/pyframe.py
pypy/dist/pypy/interpreter/pytraceback.py
pypy/dist/pypy/interpreter/test/test_pickle.py
pypy/dist/pypy/interpreter/typedef.py
pypy/dist/pypy/module/_pickle_support/__init__.py
Log:
pickling now passes all tests, but this doesn't say too much, frame pickling is not ready, yet.
Modified: pypy/dist/pypy/interpreter/generator.py
==============================================================================
--- pypy/dist/pypy/interpreter/generator.py (original)
+++ pypy/dist/pypy/interpreter/generator.py Sun Jun 4 13:11:48 2006
@@ -44,7 +44,6 @@
self.exhausted = False
def descr__reduce__(self, space):
- raise Exception('generator pickling is work in progress')
from pypy.interpreter.mixedmodule import MixedModule
w_mod = space.getbuiltinmodule('_pickle_support')
mod = space.interp_w(MixedModule, w_mod)
Modified: pypy/dist/pypy/interpreter/pyframe.py
==============================================================================
--- pypy/dist/pypy/interpreter/pyframe.py (original)
+++ pypy/dist/pypy/interpreter/pyframe.py Sun Jun 4 13:11:48 2006
@@ -68,37 +68,25 @@
self.instr_prev = -1
def descr__reduce__(self, space):
- '''
- >>>> dir(frame)
- ['__class__', '__delattr__', '__doc__', '__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__', 'f_back', 'f_builtins', 'f_code', 'f_exc_traceback', 'f_exc_type', 'f_exc_value', 'f_globals', 'f_lasti', 'f_lineno', 'f_locals', 'f_restricted', 'f_trace']
- '''
- raise Exception('frame pickling is work in progress')
from pypy.interpreter.mixedmodule import MixedModule
w_mod = space.getbuiltinmodule('_pickle_support')
mod = space.interp_w(MixedModule, w_mod)
new_inst = mod.get('frame_new')
w = space.wrap
- #XXX how to call PyFrame.fget_f_lineno(..) from here? just make it a staticmethod?
- #f_lineno = PyFrame.fget_f_lineno(space, self) #TypeError: unbound method fget_f_lineno() must be called with PyFrame instance as first argument (got StdObjSpace instance instead)
if self.w_f_trace is None:
f_lineno = self.get_last_lineno()
else:
f_lineno = self.f_lineno
valuestack = [w(item) for item in self.valuestack.items]
- #print 'XXX valuestack=', valuestack
-
blockstack = [w(item) for item in self.blockstack.items]
- #print 'XXX blockstack=', blockstack
tup = [
w(self.f_back),
w(self.builtin),
w(self.pycode),
space.w_None, #space.newtuple(valuestack), #XXX <pypy.interpreter.nestedscope.PyNestedScopeFrame object at 0x25545d0> causes AttributeError: 'NoneType' object has no attribute 'getclass'
- #YYY sure! the stack can contain NULLs.
- #YYY I'm again and again strongly recommending to *read* the existing implementation.
space.w_None, #space.newtuple(blockstack),
w(self.last_exception), #f_exc_traceback, f_exc_type, f_exc_value
self.w_globals,
@@ -118,11 +106,6 @@
w(self.instr_prev),
]
- #XXX what to do with valuestack and blockstack here?
- #YYY well, we build the valuestack as a tuple (with a marker for NULL objects)
- #YYY and we pickle the blockstack as well.
- #YYY see frameobject_reduce line 722 in prickelpit.c in the stackless distro.
-
return space.newtuple([new_inst, space.newtuple(tup)])
def hide(self):
Modified: pypy/dist/pypy/interpreter/pytraceback.py
==============================================================================
--- pypy/dist/pypy/interpreter/pytraceback.py (original)
+++ pypy/dist/pypy/interpreter/pytraceback.py Sun Jun 4 13:11:48 2006
@@ -19,7 +19,6 @@
self.next = next
def descr__reduce__(self, space):
- raise Exception('traceback pickling is work in progress')
from pypy.interpreter.mixedmodule import MixedModule
w_mod = space.getbuiltinmodule('_pickle_support')
mod = space.interp_w(MixedModule, w_mod)
Modified: pypy/dist/pypy/interpreter/test/test_pickle.py
==============================================================================
--- pypy/dist/pypy/interpreter/test/test_pickle.py (original)
+++ pypy/dist/pypy/interpreter/test/test_pickle.py Sun Jun 4 13:11:48 2006
@@ -14,15 +14,17 @@
mod = new.module('mod')
import sys
sys.modules['mod'] = mod
- def func():
- return 42
- mod.__dict__['func'] = func
- func.__module__ = 'mod'
- import pickle
- pckl = pickle.dumps(func)
- result = pickle.loads(pckl)
- assert func is result
- del sys.modules['mod']
+ try:
+ def func():
+ return 42
+ mod.__dict__['func'] = func
+ func.__module__ = 'mod'
+ import pickle
+ pckl = pickle.dumps(func)
+ result = pickle.loads(pckl)
+ assert func is result
+ finally:
+ del sys.modules['mod']
def test_pickle_not_imported_module(self):
import new
@@ -33,7 +35,6 @@
result = pickle.loads(pckl)
assert mod.__name__ == result.__name__
assert mod.__dict__ == result.__dict__
- #print mod.__dict__
def test_pickle_builtin_func(self):
import pickle
@@ -73,11 +74,6 @@
assert not (cell != result)
def test_pickle_frame(self):
- '''
- >>>> dir(frame)
- ['__class__', '__delattr__', '__doc__', '__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__', 'f_back', 'f_builtins', 'f_code', 'f_exc_traceback', 'f_exc_type', 'f_exc_value', 'f_globals', 'f_lasti', 'f_lineno', 'f_locals', 'f_restricted', 'f_trace']
- '''
- skip("work in progress")
from sys import exc_info
def f():
try:
@@ -115,7 +111,6 @@
assert f1.f_trace is f2.f_trace
def test_pickle_traceback(self):
- skip("work in progress")
def f():
try:
raise Exception()
@@ -196,43 +191,54 @@
assert a == result
def test_pickle_method(self):
- skip("work in progress")
class myclass(object):
def f(self):
- pass
+ return 42
def __reduce__(self):
- return (myclass,())
- import pickle
+ return (myclass, ())
+ import pickle, sys, new
+ myclass.__module__ = 'mod'
myclass_inst = myclass()
- method = myclass_inst.f
- pckl = pickle.dumps(method)
- result = pickle.loads(pckl)
- assert method == result
-
+ mod = new.module('mod')
+ mod.myclass = myclass
+ sys.modules['mod'] = mod
+ try:
+ method = myclass_inst.f
+ pckl = pickle.dumps(method)
+ result = pickle.loads(pckl)
+ # we cannot compare the objects, because the method will be a fresh one
+ assert method() == result()
+ finally:
+ del sys.modules['mod']
def test_pickle_staticmethod(self):
- skip("work in progress")
class myclass(object):
- def f(self):
- pass
+ def f():
+ return 42
f = staticmethod(f)
import pickle
method = myclass.f
pckl = pickle.dumps(method)
result = pickle.loads(pckl)
- assert method == result
+ assert method() == result()
def test_pickle_classmethod(self):
- skip("work in progress")
class myclass(object):
- def f(self):
- pass
+ def f(cls):
+ return cls
f = classmethod(f)
- import pickle
- method = myclass.f
- pckl = pickle.dumps(method)
- result = pickle.loads(pckl)
- assert method == result
+ import pickle, sys, new
+ myclass.__module__ = 'mod'
+ mod = new.module('mod')
+ mod.myclass = myclass
+ sys.modules['mod'] = mod
+ try:
+ method = myclass.f
+ pckl = pickle.dumps(method)
+ result = pickle.loads(pckl)
+ assert method() == result()
+ finally:
+ del sys.modules['mod']
def test_pickle_sequenceiter(self):
'''
@@ -296,7 +302,6 @@
assert list(result) == [2,3,4]
def test_pickle_generator(self):
- skip("work in progress (implement after frame pickling)")
import pickle
def giveme(n):
x = 0
Modified: pypy/dist/pypy/interpreter/typedef.py
==============================================================================
--- pypy/dist/pypy/interpreter/typedef.py (original)
+++ pypy/dist/pypy/interpreter/typedef.py Sun Jun 4 13:11:48 2006
@@ -521,8 +521,8 @@
)
PyFrame.typedef = TypeDef('frame',
- #__reduce__ = interp2app(PyFrame.descr__reduce__,
- # unwrap_spec=['self', ObjSpace]),
+ __reduce__ = interp2app(PyFrame.descr__reduce__,
+ unwrap_spec=['self', ObjSpace]),
f_builtins = GetSetProperty(PyFrame.fget_f_builtins),
f_lineno = GetSetProperty(PyFrame.fget_f_lineno, PyFrame.fset_f_lineno),
f_back = GetSetProperty(PyFrame.fget_f_back),
@@ -623,8 +623,8 @@
del BuiltinFunction.typedef.rawdict['__get__']
PyTraceback.typedef = TypeDef("traceback",
- #__reduce__ = interp2app(PyTraceback.descr__reduce__,
- # unwrap_spec=['self', ObjSpace]),
+ __reduce__ = interp2app(PyTraceback.descr__reduce__,
+ unwrap_spec=['self', ObjSpace]),
tb_frame = interp_attrproperty('frame', cls=PyTraceback),
tb_lasti = interp_attrproperty('lasti', cls=PyTraceback),
tb_lineno = interp_attrproperty('lineno', cls=PyTraceback),
@@ -632,8 +632,8 @@
)
GeneratorIterator.typedef = TypeDef("generator",
- #__reduce__ = interp2app(GeneratorIterator.descr__reduce__,
- # unwrap_spec=['self', ObjSpace]),
+ __reduce__ = interp2app(GeneratorIterator.descr__reduce__,
+ unwrap_spec=['self', ObjSpace]),
next = interp2app(GeneratorIterator.descr_next),
__iter__ = interp2app(GeneratorIterator.descr__iter__),
gi_running = interp_attrproperty('running', cls=GeneratorIterator),
Modified: pypy/dist/pypy/module/_pickle_support/__init__.py
==============================================================================
--- pypy/dist/pypy/module/_pickle_support/__init__.py (original)
+++ pypy/dist/pypy/module/_pickle_support/__init__.py Sun Jun 4 13:11:48 2006
@@ -15,7 +15,7 @@
'dictiter_surrogate_new' : 'maker.dictiter_surrogate_new',
'seqiter_new' : 'maker.seqiter_new',
'reverseseqiter_new' : 'maker.reverseseqiter_new',
- #'frame_new' : 'maker.frame_new',
- #'traceback_new' : 'maker.traceback_new',
- #'generator_new' : 'maker.generator_new',
+ 'frame_new' : 'maker.frame_new',
+ 'traceback_new' : 'maker.traceback_new',
+ 'generator_new' : 'maker.generator_new',
}
More information about the Pypy-commit
mailing list