gh-117281: Change weakref repr() to fully qualified name (#117285)

Use the fully qualified type name in repr() of weakref.ref and
weakref.proxy types.

Fix a crash in proxy_repr() when the reference is dead.

Add also test_ref_repr() and test_proxy_repr().
This commit is contained in:
Victor Stinner 2024-04-03 12:18:05 +02:00 committed by GitHub
parent 8987a5c809
commit 8ef98924d3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 57 additions and 8 deletions

View file

@ -177,13 +177,13 @@ weakref_repr(PyObject *self)
PyObject *repr;
if (name == NULL || !PyUnicode_Check(name)) {
repr = PyUnicode_FromFormat(
"<weakref at %p; to '%s' at %p>",
self, Py_TYPE(obj)->tp_name, obj);
"<weakref at %p; to '%T' at %p>",
self, obj, obj);
}
else {
repr = PyUnicode_FromFormat(
"<weakref at %p; to '%s' at %p (%U)>",
self, Py_TYPE(obj)->tp_name, obj, name);
"<weakref at %p; to '%T' at %p (%U)>",
self, obj, obj, name);
}
Py_DECREF(obj);
Py_XDECREF(name);
@ -471,10 +471,18 @@ static PyObject *
proxy_repr(PyObject *proxy)
{
PyObject *obj = _PyWeakref_GET_REF(proxy);
PyObject *repr = PyUnicode_FromFormat(
"<weakproxy at %p to %s at %p>",
proxy, Py_TYPE(obj)->tp_name, obj);
Py_DECREF(obj);
PyObject *repr;
if (obj != NULL) {
repr = PyUnicode_FromFormat(
"<weakproxy at %p; to '%T' at %p>",
proxy, obj, obj);
Py_DECREF(obj);
}
else {
repr = PyUnicode_FromFormat(
"<weakproxy at %p; dead>",
proxy);
}
return repr;
}