[Python-checkins] bpo-36974: add some assertions for PEP 590 (GH-13682)

Petr Viktorin webhook-mailer at python.org
Sun Jun 2 19:57:26 EDT 2019


https://github.com/python/cpython/commit/be718c33f06b3496faa61142df24fb071fd5d1f1
commit: be718c33f06b3496faa61142df24fb071fd5d1f1
branch: master
author: Jeroen Demeyer <J.Demeyer at UGent.be>
committer: Petr Viktorin <encukou at gmail.com>
date: 2019-06-03T01:57:22+02:00
summary:

bpo-36974: add some assertions for PEP 590 (GH-13682)

files:
M Objects/typeobject.c

diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index beb0ddd82400..006df8d1f090 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -5233,6 +5233,20 @@ PyType_Ready(PyTypeObject *type)
     _PyObject_ASSERT((PyObject *)type,
                      (type->tp_flags & Py_TPFLAGS_READYING) == 0);
 
+    /* Consistency checks for PEP 590:
+     * - Py_TPFLAGS_METHOD_DESCRIPTOR requires tp_descr_get
+     * - _Py_TPFLAGS_HAVE_VECTORCALL requires tp_call and
+     *   tp_vectorcall_offset > 0
+     * To avoid mistakes, we require this before inheriting.
+     */
+    if (type->tp_flags & Py_TPFLAGS_METHOD_DESCRIPTOR) {
+        _PyObject_ASSERT((PyObject *)type, type->tp_descr_get != NULL);
+    }
+    if (type->tp_flags & _Py_TPFLAGS_HAVE_VECTORCALL) {
+        _PyObject_ASSERT((PyObject *)type, type->tp_vectorcall_offset > 0);
+        _PyObject_ASSERT((PyObject *)type, type->tp_call != NULL);
+    }
+
     type->tp_flags |= Py_TPFLAGS_READYING;
 
 #ifdef Py_TRACE_REFS



More information about the Python-checkins mailing list