This is a 3.8-only compatibility measure for third-party Cython-based sdists.
https://bugs.python.org/issue37250
destructor tp_finalize;
vectorcallfunc tp_vectorcall;
+ /* bpo-37250: kept for backwards compatibility in CPython 3.8 only */
+ Py_DEPRECATED(3.8) int (*tp_print)(PyObject *, FILE *, int);
+
#ifdef COUNT_ALLOCS
/* these must be last and never explicitly initialized */
Py_ssize_t tp_allocs;
check((1,2,3), vsize('') + 3*self.P)
# type
# static type: PyTypeObject
- fmt = 'P2nPI13Pl4Pn9Pn11PIPP'
+ fmt = 'P2nPI13Pl4Pn9Pn11PIPPP'
if hasattr(sys, 'getcounts'):
fmt += '3n2P'
s = vsize(fmt)
--- /dev/null
+``tp_print`` is put back at the end of the ``PyTypeObject`` structure
+to restore support for old code (in particular generated by Cython)
+setting ``tp_print = 0``.
+Note that ``tp_print`` will be removed entirely in Python 3.9.
Py_INCREF(&MyList_Type);
PyModule_AddObject(m, "MyList", (PyObject *)&MyList_Type);
+ /* bpo-37250: old Cython code sets tp_print to 0, we check that
+ * this doesn't break anything. */
+ MyList_Type.tp_print = 0;
+
if (PyType_Ready(&MethodDescriptorBase_Type) < 0)
return NULL;
Py_INCREF(&MethodDescriptorBase_Type);