]> granicus.if.org Git - python/commitdiff
[3.8] bpo-37250: put back tp_print for backwards compatibility (GH-14193)
authorJeroen Demeyer <J.Demeyer@UGent.be>
Tue, 25 Jun 2019 10:58:58 +0000 (12:58 +0200)
committerPetr Viktorin <encukou@gmail.com>
Tue, 25 Jun 2019 10:58:58 +0000 (12:58 +0200)
This is a 3.8-only compatibility measure for third-party Cython-based sdists.

https://bugs.python.org/issue37250

Include/cpython/object.h
Lib/test/test_sys.py
Misc/NEWS.d/next/C API/2019-06-12-11-45-36.bpo-37221.RhP1E7.rst [new file with mode: 0644]
Modules/_testcapimodule.c

index a65aaf6482159cad2c65e8fb67c64de6350b82e9..5a0ac4afdae83d91a6211172834f5a0afbc2f832 100644 (file)
@@ -256,6 +256,9 @@ typedef struct _typeobject {
     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;
index 49f2722d95140ee3fd23f7b3392195a4bce77b87..a7df7a2fc8c9785db1adcd8a9d3c662348330782 100644 (file)
@@ -1275,7 +1275,7 @@ class SizeofTest(unittest.TestCase):
         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)
diff --git a/Misc/NEWS.d/next/C API/2019-06-12-11-45-36.bpo-37221.RhP1E7.rst b/Misc/NEWS.d/next/C API/2019-06-12-11-45-36.bpo-37221.RhP1E7.rst
new file mode 100644 (file)
index 0000000..96b61de
--- /dev/null
@@ -0,0 +1,4 @@
+``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.
index 07aadea3e98395e5f56379f605c45659ed4e75d0..1042ea701923c25e6e0695f9058568fa2b00ebaa 100644 (file)
@@ -6008,6 +6008,10 @@ PyInit__testcapi(void)
     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);