@@ -451,16 +451,31 @@ record_subscript(ApgRecordObject* o, PyObject* item)
451
451
}
452
452
453
453
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
+
454
469
static PyObject *
455
470
record_repr (ApgRecordObject * v )
456
471
{
457
472
Py_ssize_t i , n ;
458
- PyObject * keys_iter ;
473
+ PyObject * keys_iter , * type_prefix ;
459
474
_PyUnicodeWriter writer ;
460
475
461
476
n = Py_SIZE (v );
462
477
if (n == 0 ) {
463
- return PyUnicode_FromString ("<Record>" );
478
+ return PyUnicode_FromFormat ("<%s>" , get_typename ( Py_TYPE ( v )) );
464
479
}
465
480
466
481
keys_iter = PyObject_GetIter (v -> desc -> keys );
@@ -471,16 +486,22 @@ record_repr(ApgRecordObject *v)
471
486
i = Py_ReprEnter ((PyObject * )v );
472
487
if (i != 0 ) {
473
488
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 ;
475
493
}
476
494
477
495
_PyUnicodeWriter_Init (& writer );
478
496
writer .overallocate = 1 ;
479
497
writer .min_length = 12 ; /* <Record a=1> */
480
498
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 );
482
502
goto error ;
483
503
}
504
+ Py_DECREF (type_prefix );
484
505
485
506
for (i = 0 ; i < n ; ++ i ) {
486
507
PyObject * key ;
0 commit comments