@@ -157,34 +157,31 @@ static PyObject *
157157weakref_repr (PyWeakReference * self )
158158{
159159 char buffer [256 ];
160- if (PyWeakref_GET_OBJECT (self ) == Py_None ) {
161- PyOS_snprintf (buffer , sizeof (buffer ), "<weakref at %p; dead>" , self );
160+ PyObject * name , * repr ;
161+
162+ if (PyWeakref_GET_OBJECT (self ) == Py_None )
163+ return PyUnicode_FromFormat ("<weakref at %p; dead>" , self );
164+
165+ name = PyObject_GetAttrString (PyWeakref_GET_OBJECT (self ), "__name__" );
166+ if (name == NULL || !PyUnicode_Check (name )) {
167+ if (name == NULL )
168+ PyErr_Clear ();
169+ repr = PyUnicode_FromFormat (
170+ "<weakref at %p; to '%s' at %p>" ,
171+ self ,
172+ Py_TYPE (PyWeakref_GET_OBJECT (self ))-> tp_name ,
173+ PyWeakref_GET_OBJECT (self ));
162174 }
163175 else {
164- char * name = NULL ;
165- PyObject * nameobj = PyObject_GetAttrString (PyWeakref_GET_OBJECT (self ),
166- "__name__" );
167- if (nameobj == NULL )
168- PyErr_Clear ();
169- else if (PyUnicode_Check (nameobj ))
170- name = _PyUnicode_AsString (nameobj );
171- if (name )
172- PyOS_snprintf (buffer , sizeof (buffer ),
173- "<weakref at %p; to '%.50s' at %p (%s)>" ,
174- self ,
175- Py_TYPE (PyWeakref_GET_OBJECT (self ))-> tp_name ,
176- PyWeakref_GET_OBJECT (self ),
177- name );
178- else
179- PyOS_snprintf (buffer , sizeof (buffer ),
180- "<weakref at %p; to '%.50s' at %p>" ,
181- self ,
182- Py_TYPE (PyWeakref_GET_OBJECT (self ))-> tp_name ,
183- PyWeakref_GET_OBJECT (self ));
184-
185- Py_XDECREF (nameobj );
176+ repr = PyUnicode_FromFormat (
177+ "<weakref at %p; to '%s' at %p (%U)>" ,
178+ self ,
179+ Py_TYPE (PyWeakref_GET_OBJECT (self ))-> tp_name ,
180+ PyWeakref_GET_OBJECT (self ),
181+ name );
186182 }
187- return PyUnicode_FromString (buffer );
183+ Py_XDECREF (name );
184+ return repr ;
188185}
189186
190187/* Weak references only support equality, not ordering. Two weak references
@@ -459,12 +456,11 @@ WRAP_TERNARY(proxy_call, PyEval_CallObjectWithKeywords)
459456static PyObject *
460457proxy_repr (PyWeakReference * proxy )
461458{
462- char buf [160 ];
463- PyOS_snprintf (buf , sizeof (buf ),
464- "<weakproxy at %p to %.100s at %p>" , proxy ,
465- Py_TYPE (PyWeakref_GET_OBJECT (proxy ))-> tp_name ,
466- PyWeakref_GET_OBJECT (proxy ));
467- return PyUnicode_FromString (buf );
459+ return PyUnicode_FromFormat (
460+ "<weakproxy at %p to %s at %p>" ,
461+ proxy ,
462+ Py_TYPE (PyWeakref_GET_OBJECT (proxy ))-> tp_name ,
463+ PyWeakref_GET_OBJECT (proxy ));
468464}
469465
470466
0 commit comments