- The repr() of a weakref object now shows the __name__ attribute of
  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.
diff --git a/Misc/NEWS b/Misc/NEWS
index 1e3800b..5cc7ce8 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,9 @@
 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 @@
 {
     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 @@
 {
     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);