@@ -5533,23 +5533,15 @@ get_base_by_token_recursive(PyObject *bases, void *token)
55335533}
55345534
55355535int
5536- PyType_GetBaseByToken (PyTypeObject * type , void * token , PyTypeObject * * result )
5536+ _PyType_GetBaseByToken_Borrow (PyTypeObject * type , void * token , PyTypeObject * * result )
55375537{
5538+ assert (token != NULL );
5539+ assert (PyType_Check (type ));
5540+
55385541 if (result != NULL ) {
55395542 * result = NULL ;
55405543 }
55415544
5542- if (token == NULL ) {
5543- PyErr_Format (PyExc_SystemError ,
5544- "PyType_GetBaseByToken called with token=NULL" );
5545- return -1 ;
5546- }
5547- if (!PyType_Check (type )) {
5548- PyErr_Format (PyExc_TypeError ,
5549- "expected a type, got a '%T' object" , type );
5550- return -1 ;
5551- }
5552-
55535545 if (!_PyType_HasFeature (type , Py_TPFLAGS_HEAPTYPE )) {
55545546 // No static type has a heaptype superclass,
55555547 // which is ensured by type_ready_mro().
@@ -5558,7 +5550,7 @@ PyType_GetBaseByToken(PyTypeObject *type, void *token, PyTypeObject **result)
55585550 if (((PyHeapTypeObject * )type )-> ht_token == token ) {
55595551found :
55605552 if (result != NULL ) {
5561- * result = ( PyTypeObject * ) Py_NewRef ( type ) ;
5553+ * result = type ;
55625554 }
55635555 return 1 ;
55645556 }
@@ -5592,6 +5584,30 @@ PyType_GetBaseByToken(PyTypeObject *type, void *token, PyTypeObject **result)
55925584 return 0 ;
55935585}
55945586
5587+ int
5588+ PyType_GetBaseByToken (PyTypeObject * type , void * token , PyTypeObject * * result )
5589+ {
5590+ if (result != NULL ) {
5591+ * result = NULL ;
5592+ }
5593+ if (token == NULL ) {
5594+ PyErr_Format (PyExc_SystemError ,
5595+ "PyType_GetBaseByToken called with token=NULL" );
5596+ return -1 ;
5597+ }
5598+ if (!PyType_Check (type )) {
5599+ PyErr_Format (PyExc_TypeError ,
5600+ "expected a type, got a '%T' object" , type );
5601+ return -1 ;
5602+ }
5603+
5604+ int res = _PyType_GetBaseByToken_Borrow (type , token , result );
5605+ if (res > 0 && result ) {
5606+ Py_INCREF (* result );
5607+ }
5608+ return res ;
5609+ }
5610+
55955611
55965612void *
55975613PyObject_GetTypeData (PyObject * obj , PyTypeObject * cls )
0 commit comments