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
{
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);
}
{
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);