From e6c470f255b958d65db75e2b9c2416585638b6cf Mon Sep 17 00:00:00 2001
From: Raymond Hettinger <python@rcn.com>
Date: Sun, 27 Mar 2005 03:04:54 +0000
Subject: 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 75869a7..2754cec 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 02370c4..5412dd3 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
-- 
cgit v0.12

