@@ -5877,23 +5877,15 @@ get_base_by_token_recursive(PyObject *bases, void *token)
58775877}
58785878
58795879int
5880- PyType_GetBaseByToken (PyTypeObject * type , void * token , PyTypeObject * * result )
5880+ _PyType_GetBaseByToken_Borrow (PyTypeObject * type , void * token , PyTypeObject * * result )
58815881{
5882+ assert (token != NULL );
5883+ assert (PyType_Check (type ));
5884+
58825885 if (result != NULL ) {
58835886 * result = NULL ;
58845887 }
58855888
5886- if (token == NULL ) {
5887- PyErr_Format (PyExc_SystemError ,
5888- "PyType_GetBaseByToken called with token=NULL" );
5889- return -1 ;
5890- }
5891- if (!PyType_Check (type )) {
5892- PyErr_Format (PyExc_TypeError ,
5893- "expected a type, got a '%T' object" , type );
5894- return -1 ;
5895- }
5896-
58975889 if (!_PyType_HasFeature (type , Py_TPFLAGS_HEAPTYPE )) {
58985890 // No static type has a heaptype superclass,
58995891 // which is ensured by type_ready_mro().
@@ -5902,7 +5894,7 @@ PyType_GetBaseByToken(PyTypeObject *type, void *token, PyTypeObject **result)
59025894 if (((PyHeapTypeObject * )type )-> ht_token == token ) {
59035895found :
59045896 if (result != NULL ) {
5905- * result = ( PyTypeObject * ) Py_NewRef ( type ) ;
5897+ * result = type ;
59065898 }
59075899 return 1 ;
59085900 }
@@ -5936,6 +5928,30 @@ PyType_GetBaseByToken(PyTypeObject *type, void *token, PyTypeObject **result)
59365928 return 0 ;
59375929}
59385930
5931+ int
5932+ PyType_GetBaseByToken (PyTypeObject * type , void * token , PyTypeObject * * result )
5933+ {
5934+ if (result != NULL ) {
5935+ * result = NULL ;
5936+ }
5937+ if (token == NULL ) {
5938+ PyErr_Format (PyExc_SystemError ,
5939+ "PyType_GetBaseByToken called with token=NULL" );
5940+ return -1 ;
5941+ }
5942+ if (!PyType_Check (type )) {
5943+ PyErr_Format (PyExc_TypeError ,
5944+ "expected a type, got a '%T' object" , type );
5945+ return -1 ;
5946+ }
5947+
5948+ int res = _PyType_GetBaseByToken_Borrow (type , token , result );
5949+ if (res > 0 && result ) {
5950+ Py_INCREF (* result );
5951+ }
5952+ return res ;
5953+ }
5954+
59395955
59405956void *
59415957PyObject_GetTypeData (PyObject * obj , PyTypeObject * cls )
0 commit comments