bpo-42747: Remove Py_TPFLAGS_HAVE_AM_SEND and make Py_TPFLAGS_HAVE_VERSION_TAG no-op (GH-27260)

* Remove code that checks Py_TPFLAGS_HAVE_VERSION_TAG
    
    The field is always present in the type struct, as explained
    in the added comment.

* Remove Py_TPFLAGS_HAVE_AM_SEND
    
    The flag is not needed, and since it was added in 3.10 it can be removed now.
This commit is contained in:
Petr Viktorin 2021-07-23 15:21:11 +02:00 committed by GitHub
parent 7d28a6eb90
commit a4760cc32d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 24 additions and 56 deletions

View file

@ -324,10 +324,6 @@ PyType_Modified(PyTypeObject *type)
Invariants:
- Py_TPFLAGS_VALID_VERSION_TAG is never set if
Py_TPFLAGS_HAVE_VERSION_TAG is not set (in case of a
bizarre MRO, see type_mro_modified()).
- before Py_TPFLAGS_VALID_VERSION_TAG can be set on a type,
it must first be set on all super types.
@ -379,9 +375,6 @@ type_mro_modified(PyTypeObject *type, PyObject *bases) {
PyObject *mro_meth = NULL;
PyObject *type_mro_meth = NULL;
if (!_PyType_HasFeature(type, Py_TPFLAGS_HAVE_VERSION_TAG))
return;
if (custom) {
mro_meth = lookup_maybe_method(
(PyObject *)type, &PyId_mro, &unbound);
@ -404,8 +397,7 @@ type_mro_modified(PyTypeObject *type, PyObject *bases) {
assert(PyType_Check(b));
cls = (PyTypeObject *)b;
if (!_PyType_HasFeature(cls, Py_TPFLAGS_HAVE_VERSION_TAG) ||
!PyType_IsSubtype(type, cls)) {
if (!PyType_IsSubtype(type, cls)) {
goto clear;
}
}
@ -413,8 +405,7 @@ type_mro_modified(PyTypeObject *type, PyObject *bases) {
clear:
Py_XDECREF(mro_meth);
Py_XDECREF(type_mro_meth);
type->tp_flags &= ~(Py_TPFLAGS_HAVE_VERSION_TAG|
Py_TPFLAGS_VALID_VERSION_TAG);
type->tp_flags &= ~Py_TPFLAGS_VALID_VERSION_TAG;
type->tp_version_tag = 0; /* 0 is not a valid version tag */
}
@ -431,8 +422,6 @@ assign_version_tag(struct type_cache *cache, PyTypeObject *type)
if (_PyType_HasFeature(type, Py_TPFLAGS_VALID_VERSION_TAG))
return 1;
if (!_PyType_HasFeature(type, Py_TPFLAGS_HAVE_VERSION_TAG))
return 0;
if (!_PyType_HasFeature(type, Py_TPFLAGS_READY))
return 0;
@ -5978,14 +5967,6 @@ type_ready_pre_checks(PyTypeObject *type)
_PyObject_ASSERT((PyObject *)type, type->tp_call != NULL);
}
/* Consistency check for Py_TPFLAGS_HAVE_AM_SEND - flag requires
* type->tp_as_async->am_send to be present.
*/
if (type->tp_flags & Py_TPFLAGS_HAVE_AM_SEND) {
_PyObject_ASSERT((PyObject *)type, type->tp_as_async != NULL);
_PyObject_ASSERT((PyObject *)type, type->tp_as_async->am_send != NULL);
}
/* Consistency checks for pattern matching
* Py_TPFLAGS_SEQUENCE and Py_TPFLAGS_MAPPING are mutually exclusive */
_PyObject_ASSERT((PyObject *)type, (type->tp_flags & COLLECTION_FLAGS) != COLLECTION_FLAGS);