From e6c470f255b958d65db75e2b9c2416585638b6cf Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sun, 27 Mar 2005 03:04:54 +0000 Subject: [PATCH] SF bug #1770766: weakref proxy has incorrect __nonzero__ behavior. --- Lib/test/test_weakref.py | 6 ++++++ Objects/weakrefobject.c | 6 +----- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/Lib/test/test_weakref.py b/Lib/test/test_weakref.py index 75869a758a6..2754cec5a2c 100644 --- a/Lib/test/test_weakref.py +++ b/Lib/test/test_weakref.py @@ -271,6 +271,12 @@ class ReferencesTestCase(TestBase): del f[0] self.assertEqual(f.result, 0) + def test_proxy_bool(self): + # Test clearing of SF bug #1170766 + class List(list): pass + lyst = List() + self.assertEqual(bool(weakref.proxy(lyst)), bool(lyst)) + def test_getweakrefcount(self): o = C() ref1 = weakref.ref(o) diff --git a/Objects/weakrefobject.c b/Objects/weakrefobject.c index 02370c4a7ae..5412dd31726 100644 --- a/Objects/weakrefobject.c +++ b/Objects/weakrefobject.c @@ -505,11 +505,7 @@ proxy_nonzero(PyWeakReference *proxy) PyObject *o = PyWeakref_GET_OBJECT(proxy); if (!proxy_checkref(proxy)) return -1; - if (o->ob_type->tp_as_number && - o->ob_type->tp_as_number->nb_nonzero) - return (*o->ob_type->tp_as_number->nb_nonzero)(o); - else - return 1; + return PyObject_IsTrue(o); } static void