From be718c33f06b3496faa61142df24fb071fd5d1f1 Mon Sep 17 00:00:00 2001 From: Jeroen Demeyer Date: Mon, 3 Jun 2019 01:57:22 +0200 Subject: bpo-36974: add some assertions for PEP 590 (GH-13682) --- Objects/typeobject.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Objects/typeobject.c b/Objects/typeobject.c index beb0ddd..006df8d 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 -- cgit v0.12