Author: Amaury Forgeot d'Arc <amaur...@gmail.com> 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 pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit