@@ -451,16 +451,31 @@ record_subscript(ApgRecordObject* o, PyObject* item)
451451}
452452
453453
454+ static const char *
455+ get_typename (PyTypeObject * type )
456+ {
457+ assert (type -> tp_name != NULL );
458+ const char * s = strrchr (type -> tp_name , '.' );
459+ if (s == NULL ) {
460+ s = type -> tp_name ;
461+ }
462+ else {
463+ s ++ ;
464+ }
465+ return s ;
466+ }
467+
468+
454469static PyObject *
455470record_repr (ApgRecordObject * v )
456471{
457472 Py_ssize_t i , n ;
458- PyObject * keys_iter ;
473+ PyObject * keys_iter , * type_prefix ;
459474 _PyUnicodeWriter writer ;
460475
461476 n = Py_SIZE (v );
462477 if (n == 0 ) {
463- return PyUnicode_FromString ("<Record>" );
478+ return PyUnicode_FromFormat ("<%s>" , get_typename ( Py_TYPE ( v )) );
464479 }
465480
466481 keys_iter = PyObject_GetIter (v -> desc -> keys );
@@ -471,16 +486,22 @@ record_repr(ApgRecordObject *v)
471486 i = Py_ReprEnter ((PyObject * )v );
472487 if (i != 0 ) {
473488 Py_DECREF (keys_iter );
474- return i > 0 ? PyUnicode_FromString ("<Record ...>" ) : NULL ;
489+ if (i > 0 ) {
490+ return PyUnicode_FromFormat ("<%s ...>" , get_typename (Py_TYPE (v )));
491+ }
492+ return NULL ;
475493 }
476494
477495 _PyUnicodeWriter_Init (& writer );
478496 writer .overallocate = 1 ;
479497 writer .min_length = 12 ; /* <Record a=1> */
480498
481- if (_PyUnicodeWriter_WriteASCIIString (& writer , "<Record " , 8 ) < 0 ) {
499+ type_prefix = PyUnicode_FromFormat ("<%s " , get_typename (Py_TYPE (v )));
500+ if (_PyUnicodeWriter_WriteStr (& writer , type_prefix ) < 0 ) {
501+ Py_DECREF (type_prefix );
482502 goto error ;
483503 }
504+ Py_DECREF (type_prefix );
484505
485506 for (i = 0 ; i < n ; ++ i ) {
486507 PyObject * key ;
0 commit comments