Author: Amaury Forgeot d'Arc <[email protected]>
Branch: py3.5
Changeset: r87699:25f86076fa10
Date: 2016-10-11 00:53 +0200
http://bitbucket.org/pypy/pypy/changeset/25f86076fa10/
Log: Add weakref.__callback__
diff --git a/pypy/module/_weakref/interp__weakref.py
b/pypy/module/_weakref/interp__weakref.py
--- a/pypy/module/_weakref/interp__weakref.py
+++ b/pypy/module/_weakref/interp__weakref.py
@@ -2,7 +2,7 @@
from pypy.interpreter.baseobjspace import W_Root
from pypy.interpreter.error import oefmt
from pypy.interpreter.gateway import interp2app, ObjSpace
-from pypy.interpreter.typedef import TypeDef
+from pypy.interpreter.typedef import TypeDef, GetSetProperty
from pypy.interpreter.executioncontext import AsyncAction, report_error
from rpython.rlib import jit, rgc
from rpython.rlib.rshrinklist import AbstractShrinkList
@@ -150,6 +150,7 @@
except Exception as e:
report_error(self.space, e,
"weakref callback ", w_ref.w_callable)
+ w_ref.w_callable = None
# ____________________________________________________________
@@ -187,6 +188,9 @@
state = u"; to '%s'" % (typename,)
return self.getrepr(space, unicode(self.typedef.name), state)
+ def descr_callback(self, space):
+ return self.w_callable
+
class W_Weakref(W_WeakrefBase):
def __init__(self, space, w_obj, w_callable):
@@ -256,6 +260,7 @@
__hash__ = interp2app(W_Weakref.descr_hash),
__call__ = interp2app(W_Weakref.descr_call),
__repr__ = interp2app(W_WeakrefBase.descr__repr__),
+ __callback__ = GetSetProperty(W_WeakrefBase.descr_callback),
)
diff --git a/pypy/module/_weakref/test/test_weakref.py
b/pypy/module/_weakref/test/test_weakref.py
--- a/pypy/module/_weakref/test/test_weakref.py
+++ b/pypy/module/_weakref/test/test_weakref.py
@@ -32,10 +32,13 @@
a2.ref = ref()
ref1 = _weakref.ref(a1, callback)
ref2 = _weakref.ref(a1)
+ assert ref1.__callback__ is callback
+ assert ref2.__callback__ is None
assert _weakref.getweakrefcount(a1) == 2
del a1
gc.collect()
assert ref1() is None
+ assert ref1.__callback__ is None
assert a2.ref is None
def test_callback_order(self):
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit