]> granicus.if.org Git - python/commitdiff
- The repr() of a weakref object now shows the __name__ attribute of
authorGuido van Rossum <guido@python.org>
Wed, 16 Apr 2003 21:13:23 +0000 (21:13 +0000)
committerGuido van Rossum <guido@python.org>
Wed, 16 Apr 2003 21:13:23 +0000 (21:13 +0000)
  the referenced object, if it has one.

Also use %p to format pointers consistently, and use <weakproxy ...>
in proxy_repr(), to match the type name.

Misc/NEWS
Objects/weakrefobject.c

index 1e3800b3c26452b871fc8050a85f05dee81ff354..5cc7ce8972a0d7e7becd3a663f1e182c9b158e6d 100644 (file)
--- 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
index b059080ab42ab78fe74f3b71f5d2394a40ed10d5..e26cb65b13041c4916c7cc0394e14f0de509fe57 100644 (file)
@@ -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);