[pypy-svn] r28322 - in pypy/dist/pypy: interpreter interpreter/test module/_pickle_support
tismer at codespeak.net
tismer at codespeak.net
Mon Jun 5 12:41:15 CEST 2006
Author: tismer
Date: Mon Jun 5 12:41:14 2006
New Revision: 28322
Modified:
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/maker.py
Log:
traceback pickling works now, using __setstate__ or course
Modified: pypy/dist/pypy/interpreter/pyframe.py
==============================================================================
--- pypy/dist/pypy/interpreter/pyframe.py (original)
+++ pypy/dist/pypy/interpreter/pyframe.py Mon Jun 5 12:41:14 2006
@@ -115,7 +115,8 @@
w_cells,
]
- return space.newtuple([new_inst, space.newtuple(tup_base), space.newtuple(tup_state)])
+ nt = space.newtuple
+ return nt([new_inst, nt(tup_base), nt(tup_state)])
def descr__setstate__(self, space, w_args):
from pypy.module._pickle_support import maker # helper fns
Modified: pypy/dist/pypy/interpreter/pytraceback.py
==============================================================================
--- pypy/dist/pypy/interpreter/pytraceback.py (original)
+++ pypy/dist/pypy/interpreter/pytraceback.py Mon Jun 5 12:41:14 2006
@@ -25,14 +25,24 @@
new_inst = mod.get('traceback_new')
w = space.wrap
- tup = [
+ tup_base = []
+ tup_state = [
w(self.frame),
w(self.lasti),
w(self.lineno),
w(self.next),
]
+ nt = space.newtuple
+ return nt([new_inst, nt(tup_base), nt(tup_state)])
- return space.newtuple([new_inst, space.newtuple(tup)])
+ def descr__setstate__(self, space, w_args):
+ from pypy.interpreter.pyframe import PyFrame
+ args_w = space.unpackiterable(w_args)
+ w_frame, w_lasti, w_lineno, w_next = args_w
+ self.frame = space.interp_w(PyFrame, w_frame)
+ self.lasti = space.int_w(w_lasti)
+ self.lineno = space.int_w(w_lineno)
+ self.next = space.interp_w(PyTraceback, w_next, can_be_None=True)
def record_application_traceback(space, operror, frame, last_instruction):
if frame.pycode.hidden_applevel:
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 Mon Jun 5 12:41:14 2006
@@ -162,7 +162,7 @@
f2 = pickle.loads(pckl)
def test_pickle_traceback(self):
- skip("in-progress: recursion problem")
+ #skip("in-progress: recursion problem")
def f():
try:
raise Exception()
Modified: pypy/dist/pypy/interpreter/typedef.py
==============================================================================
--- pypy/dist/pypy/interpreter/typedef.py (original)
+++ pypy/dist/pypy/interpreter/typedef.py Mon Jun 5 12:41:14 2006
@@ -627,6 +627,8 @@
PyTraceback.typedef = TypeDef("traceback",
__reduce__ = interp2app(PyTraceback.descr__reduce__,
unwrap_spec=['self', ObjSpace]),
+ __setstate__ = interp2app(PyTraceback.descr__setstate__,
+ unwrap_spec=['self', ObjSpace, W_Root]),
tb_frame = interp_attrproperty('frame', cls=PyTraceback),
tb_lasti = interp_attrproperty('lasti', cls=PyTraceback),
tb_lineno = interp_attrproperty('lineno', cls=PyTraceback),
Modified: pypy/dist/pypy/module/_pickle_support/maker.py
==============================================================================
--- pypy/dist/pypy/module/_pickle_support/maker.py (original)
+++ pypy/dist/pypy/module/_pickle_support/maker.py Mon Jun 5 12:41:14 2006
@@ -53,7 +53,7 @@
return W_ReverseSeqIterObject(space, w_seq, index)
def frame_new(space, __args__):
- args_w, kwds_w = __args__.unpack() #stolen from std/fake.py
+ args_w, kwds_w = __args__.unpack()
w_pycode, = args_w
pycode = space.interp_w(PyCode, w_pycode)
w = space.wrap
@@ -65,15 +65,10 @@
return space.wrap(new_frame)
frame_new.unwrap_spec = [ObjSpace, Arguments]
-def traceback_new(space, __args__):
- args_w, kwds_w = __args__.unpack() #stolen from std/fake.py
- w_frame, w_lasti, w_lineno, w_next = args_w
- frame = space.interp_w(PyFrame, w_frame)
- lasti = space.int_w(w_lasti)
- lineno = space.int_w(w_lineno)
- next = space.interp_w(PyTraceback, w_next, can_be_None=True)
- return space.wrap(PyTraceback(space, frame, lasti, lineno, next))
-traceback_new.unwrap_spec = [ObjSpace, Arguments]
+def traceback_new(space):
+ tb = instantiate(PyTraceback)
+ return space.wrap(tb)
+traceback_new.unwrap_spec = [ObjSpace]
def generator_new(space, __args__):
args_w, kwds_w = __args__.unpack() #stolen from std/fake.py
More information about the Pypy-commit
mailing list