Issue #16453: Fix equality testing of dead weakref objects.
Also add tests for ordering and hashing.
diff --git a/Objects/weakrefobject.c b/Objects/weakrefobject.c
index 13323cf..dae3c24 100644
--- a/Objects/weakrefobject.c
+++ b/Objects/weakrefobject.c
@@ -195,9 +195,13 @@
}
if (PyWeakref_GET_OBJECT(self) == Py_None
|| PyWeakref_GET_OBJECT(other) == Py_None) {
- PyObject *res = self==other ? Py_True : Py_False;
- Py_INCREF(res);
- return res;
+ int res = (self == other);
+ if (op == Py_NE)
+ res = !res;
+ if (res)
+ Py_RETURN_TRUE;
+ else
+ Py_RETURN_FALSE;
}
return PyObject_RichCompare(PyWeakref_GET_OBJECT(self),
PyWeakref_GET_OBJECT(other), op);