summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Misc/NEWS3
-rw-r--r--Objects/weakrefobject.c21
2 files changed, 18 insertions, 6 deletions
diff --git a/Misc/NEWS b/Misc/NEWS
index 1e3800b..5cc7ce8 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,9 @@ What's New in Python 2.3 beta 1?
Core and builtins
-----------------
+- The repr() of a weakref object now shows the __name__ attribute of
+ the referenced object, if it has one.
+
- super() no longer ignores data descriptors, except __class__. See
the thread started at
http://mail.python.org/pipermail/python-dev/2003-April/034338.html
diff --git a/Objects/weakrefobject.c b/Objects/weakrefobject.c
index b059080..e26cb65 100644
--- a/Objects/weakrefobject.c
+++ b/Objects/weakrefobject.c
@@ -124,15 +124,24 @@ weakref_repr(PyWeakReference *self)
{
char buffer[256];
if (PyWeakref_GET_OBJECT(self) == Py_None) {
- PyOS_snprintf(buffer, sizeof(buffer), "<weakref at %lx; dead>",
- (long)(self));
+ PyOS_snprintf(buffer, sizeof(buffer), "<weakref at %p; dead>", self);
}
else {
+ char *name = NULL;
+ PyObject *nameobj = PyObject_GetAttrString(PyWeakref_GET_OBJECT(self),
+ "__name__");
+ if (nameobj == NULL)
+ PyErr_Clear();
+ else if (PyString_Check(nameobj))
+ name = PyString_AS_STRING(nameobj);
PyOS_snprintf(buffer, sizeof(buffer),
- "<weakref at %#lx; to '%.50s' at %#lx>",
- (long)(self),
+ name ? "<weakref at %p; to '%.50s' at %p (%s)>"
+ : "<weakref at %p; to '%.50s' at %p>",
+ self,
PyWeakref_GET_OBJECT(self)->ob_type->tp_name,
- (long)(PyWeakref_GET_OBJECT(self)));
+ PyWeakref_GET_OBJECT(self),
+ name);
+ Py_XDECREF(nameobj);
}
return PyString_FromString(buffer);
}
@@ -268,7 +277,7 @@ proxy_repr(PyWeakReference *proxy)
{
char buf[160];
PyOS_snprintf(buf, sizeof(buf),
- "<weakref at %p to %.100s at %p>", proxy,
+ "<weakproxy at %p to %.100s at %p>", proxy,
PyWeakref_GET_OBJECT(proxy)->ob_type->tp_name,
PyWeakref_GET_OBJECT(proxy));
return PyString_FromString(buf);