[pypy-commit] pypy continulet-pickle: Pickling and unpickling of empty continulets.
arigo
noreply at buildbot.pypy.org
Mon Sep 12 15:36:14 CEST 2011
Author: Armin Rigo <arigo at tunes.org>
Branch: continulet-pickle
Changeset: r47222:b3847d33555e
Date: 2011-09-12 14:02 +0200
http://bitbucket.org/pypy/pypy/changeset/b3847d33555e/
Log: Pickling and unpickling of empty continulets.
diff --git a/pypy/module/_continuation/__init__.py b/pypy/module/_continuation/__init__.py
--- a/pypy/module/_continuation/__init__.py
+++ b/pypy/module/_continuation/__init__.py
@@ -37,4 +37,5 @@
interpleveldefs = {
'continulet': 'interp_continuation.W_Continulet',
'permute': 'interp_continuation.permute',
+ '_p': 'interp_continuation.unpickle', # pickle support
}
diff --git a/pypy/module/_continuation/interp_continuation.py b/pypy/module/_continuation/interp_continuation.py
--- a/pypy/module/_continuation/interp_continuation.py
+++ b/pypy/module/_continuation/interp_continuation.py
@@ -102,12 +102,22 @@
and not self.sthread.is_empty_handle(self.h))
return self.space.newbool(valid)
+ def descr__reduce__(self):
+ space = self.space
+ w_continulet_type = space.type(space.wrap(self))
+ return space.newtuple([getunpickle(space),
+ space.newtuple([w_continulet_type])])
+
def W_Continulet___new__(space, w_subtype, __args__):
r = space.allocate_instance(W_Continulet, w_subtype)
r.__init__(space)
return space.wrap(r)
+def unpickle(space, w_subtype):
+ """Pickle support."""
+ return W_Continulet___new__(space, w_subtype, None)
+
W_Continulet.typedef = TypeDef(
'continulet',
@@ -117,6 +127,7 @@
switch = interp2app(W_Continulet.descr_switch),
throw = interp2app(W_Continulet.descr_throw),
is_pending = interp2app(W_Continulet.descr_is_pending),
+ __reduce__ = interp2app(W_Continulet.descr__reduce__),
)
@@ -137,6 +148,7 @@
'', [], [], [], '',
'<bottom of continulet>', 0, '', [], [],
hidden_applevel=True)
+ self.w_unpickle = w_module.get('_p')
def geterror(space, message):
cs = space.fromcache(State)
@@ -150,6 +162,10 @@
cs = space.fromcache(State)
return space.FrameClass(space, cs.dummy_pycode, None, None)
+def getunpickle(space):
+ cs = space.fromcache(State)
+ return cs.w_unpickle
+
# ____________________________________________________________
More information about the pypy-commit
mailing list