From 5fc706d0e90b20bd716b8afd3228c2e3478b2ba5 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 21 Jan 2022 22:20:01 +0100 Subject: [PATCH] bpo-46417: Use _PyType_CAST() in Modules directory Cleanup also other casts to the "PyTypeObject*" type. --- Modules/_csv.c | 20 ++++++++++---------- Modules/_datetimemodule.c | 8 ++++---- Modules/_pickle.c | 22 ++++++++++++---------- Modules/_randommodule.c | 11 ++++++----- Modules/_sqlite/connection.c | 5 +++-- Modules/_sqlite/cursor.c | 5 +++-- Modules/_sqlite/prepare_protocol.c | 5 +++-- Modules/_sqlite/row.c | 5 +++-- Modules/_sqlite/statement.c | 5 +++-- Modules/_testcapimodule.c | 16 ++++++++-------- Modules/_zoneinfo.c | 3 +-- 11 files changed, 56 insertions(+), 49 deletions(-) diff --git a/Modules/_csv.c b/Modules/_csv.c index 1c2f504ea5c097..db823b71dd8447 100644 --- a/Modules/_csv.c +++ b/Modules/_csv.c @@ -1691,24 +1691,24 @@ static struct PyMethodDef csv_methods[] = { static int csv_exec(PyObject *module) { const StyleDesc *style; - PyObject *temp; _csvstate *module_state = get_csv_state(module); - temp = PyType_FromModuleAndSpec(module, &Dialect_Type_spec, NULL); - module_state->dialect_type = (PyTypeObject *)temp; - if (PyModule_AddObjectRef(module, "Dialect", temp) < 0) { + PyTypeObject *type; + type = (PyTypeObject *)PyType_FromModuleAndSpec(module, &Dialect_Type_spec, NULL); + module_state->dialect_type = type; + if (PyModule_AddObjectRef(module, "Dialect", (PyObject*)type) < 0) { return -1; } - temp = PyType_FromModuleAndSpec(module, &Reader_Type_spec, NULL); - module_state->reader_type = (PyTypeObject *)temp; - if (PyModule_AddObjectRef(module, "Reader", temp) < 0) { + type = (PyTypeObject *)PyType_FromModuleAndSpec(module, &Reader_Type_spec, NULL); + module_state->reader_type = type; + if (PyModule_AddObjectRef(module, "Reader", (PyObject*)type) < 0) { return -1; } - temp = PyType_FromModuleAndSpec(module, &Writer_Type_spec, NULL); - module_state->writer_type = (PyTypeObject *)temp; - if (PyModule_AddObjectRef(module, "Writer", temp) < 0) { + type = (PyTypeObject *)PyType_FromModuleAndSpec(module, &Writer_Type_spec, NULL); + module_state->writer_type = type; + if (PyModule_AddObjectRef(module, "Writer", (PyObject*)type) < 0) { return -1; } diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index fda8401b84cd15..d6f8d78a96cf91 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -876,10 +876,10 @@ new_date_subclass_ex(int year, int month, int day, PyObject *cls) { PyObject *result; // We have "fast path" constructors for two subclasses: date and datetime - if ((PyTypeObject *)cls == &PyDateTime_DateType) { + if (cls == (PyObject *)&PyDateTime_DateType) { result = new_date_ex(year, month, day, (PyTypeObject *)cls); } - else if ((PyTypeObject *)cls == &PyDateTime_DateTimeType) { + else if (cls == (PyObject *)&PyDateTime_DateTimeType) { result = new_datetime_ex(year, month, day, 0, 0, 0, 0, Py_None, (PyTypeObject *)cls); } @@ -942,7 +942,7 @@ new_datetime_subclass_fold_ex(int year, int month, int day, int hour, int minute int second, int usecond, PyObject *tzinfo, int fold, PyObject *cls) { PyObject* dt; - if ((PyTypeObject*)cls == &PyDateTime_DateTimeType) { + if (cls == (PyObject *)&PyDateTime_DateTimeType) { // Use the fast path constructor dt = new_datetime(year, month, day, hour, minute, second, usecond, tzinfo, fold); @@ -4603,7 +4603,7 @@ time_fromisoformat(PyObject *cls, PyObject *tstr) { } PyObject *t; - if ( (PyTypeObject *)cls == &PyDateTime_TimeType ) { + if (cls == (PyObject *)&PyDateTime_TimeType ) { t = new_time(hour, minute, second, microsecond, tzinfo, 0); } else { t = PyObject_CallFunction(cls, "iiiiO", diff --git a/Modules/_pickle.c b/Modules/_pickle.c index 0d9e57aa90d22f..733e05afa9de3b 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -5923,7 +5923,7 @@ newobj_unpickling_error(const char * msg, int use_kwargs, PyObject *arg) static int load_newobj(UnpicklerObject *self, int use_kwargs) { - PyObject *cls, *args, *kwargs = NULL; + PyObject *args, *kwargs = NULL; PyObject *obj; /* Stack is ... cls args [kwargs], and we want to call @@ -5940,21 +5940,23 @@ load_newobj(UnpicklerObject *self, int use_kwargs) Py_XDECREF(kwargs); return -1; } - PDATA_POP(self->stack, cls); - if (cls == NULL) { + PyObject *cls_obj; + PDATA_POP(self->stack, cls_obj); + if (cls_obj == NULL) { Py_XDECREF(kwargs); Py_DECREF(args); return -1; } - if (!PyType_Check(cls)) { + if (!PyType_Check(cls_obj)) { newobj_unpickling_error("%s class argument must be a type, not %.200s", - use_kwargs, cls); + use_kwargs, cls_obj); goto error; } - if (((PyTypeObject *)cls)->tp_new == NULL) { + PyTypeObject *cls = (PyTypeObject *)cls_obj; + if (cls->tp_new == NULL) { newobj_unpickling_error("%s class argument '%.200s' doesn't have __new__", - use_kwargs, cls); + use_kwargs, (PyObject*)cls); goto error; } if (!PyTuple_Check(args)) { @@ -5968,20 +5970,20 @@ load_newobj(UnpicklerObject *self, int use_kwargs) goto error; } - obj = ((PyTypeObject *)cls)->tp_new((PyTypeObject *)cls, args, kwargs); + obj = cls->tp_new(cls, args, kwargs); if (obj == NULL) { goto error; } Py_XDECREF(kwargs); Py_DECREF(args); - Py_DECREF(cls); + Py_DECREF(cls_obj); PDATA_PUSH(self->stack, obj, -1); return 0; error: Py_XDECREF(kwargs); Py_DECREF(args); - Py_DECREF(cls); + Py_DECREF(cls_obj); return -1; } diff --git a/Modules/_randommodule.c b/Modules/_randommodule.c index 45860e342eb43a..e95e9decbe9a8c 100644 --- a/Modules/_randommodule.c +++ b/Modules/_randommodule.c @@ -84,7 +84,7 @@ #define LOWER_MASK 0x7fffffffU /* least significant r bits */ typedef struct { - PyObject *Random_Type; + PyTypeObject *Random_Type; PyObject *Long___abs__; } _randomstate; @@ -531,8 +531,9 @@ random_init(RandomObject *self, PyObject *args, PyObject *kwds) PyObject *arg = NULL; _randomstate *state = _randomstate_type(Py_TYPE(self)); - if ((Py_IS_TYPE(self, (PyTypeObject *)state->Random_Type) || - Py_TYPE(self)->tp_init == ((PyTypeObject*)state->Random_Type)->tp_init) && + PyTypeObject *Random_Type = state->Random_Type; + if ((Py_IS_TYPE(self, Random_Type) || + Py_TYPE(self)->tp_init == Random_Type->tp_init) && !_PyArg_NoKeywords("Random", kwds)) { return -1; } @@ -586,12 +587,12 @@ _random_exec(PyObject *module) { _randomstate *state = get_random_state(module); - state->Random_Type = PyType_FromModuleAndSpec( + state->Random_Type = (PyTypeObject *)PyType_FromModuleAndSpec( module, &Random_Type_spec, NULL); if (state->Random_Type == NULL) { return -1; } - if (PyModule_AddType(module, (PyTypeObject *)state->Random_Type) < 0) { + if (PyModule_AddType(module, state->Random_Type) < 0) { return -1; } diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c index 02f4ac46b7c356..a082d0e6874fc5 100644 --- a/Modules/_sqlite/connection.c +++ b/Modules/_sqlite/connection.c @@ -2013,11 +2013,12 @@ static PyType_Spec connection_spec = { int pysqlite_connection_setup_types(PyObject *module) { - PyObject *type = PyType_FromModuleAndSpec(module, &connection_spec, NULL); + PyTypeObject *type; + type = (PyTypeObject *)PyType_FromModuleAndSpec(module, &connection_spec, NULL); if (type == NULL) { return -1; } pysqlite_state *state = pysqlite_get_state(module); - state->ConnectionType = (PyTypeObject *)type; + state->ConnectionType = type; return 0; } diff --git a/Modules/_sqlite/cursor.c b/Modules/_sqlite/cursor.c index 2729a85f3195d6..b295a9f1332a67 100644 --- a/Modules/_sqlite/cursor.c +++ b/Modules/_sqlite/cursor.c @@ -1033,11 +1033,12 @@ static PyType_Spec cursor_spec = { int pysqlite_cursor_setup_types(PyObject *module) { - PyObject *type = PyType_FromModuleAndSpec(module, &cursor_spec, NULL); + PyTypeObject *type; + type = (PyTypeObject *)PyType_FromModuleAndSpec(module, &cursor_spec, NULL); if (type == NULL) { return -1; } pysqlite_state *state = pysqlite_get_state(module); - state->CursorType = (PyTypeObject *)type; + state->CursorType = type; return 0; } diff --git a/Modules/_sqlite/prepare_protocol.c b/Modules/_sqlite/prepare_protocol.c index cefb46e390ad6b..5cd46aae2404a9 100644 --- a/Modules/_sqlite/prepare_protocol.c +++ b/Modules/_sqlite/prepare_protocol.c @@ -64,11 +64,12 @@ static PyType_Spec type_spec = { int pysqlite_prepare_protocol_setup_types(PyObject *module) { - PyObject *type = PyType_FromModuleAndSpec(module, &type_spec, NULL); + PyTypeObject *type; + type = (PyTypeObject *)PyType_FromModuleAndSpec(module, &type_spec, NULL); if (type == NULL) { return -1; } pysqlite_state *state = pysqlite_get_state(module); - state->PrepareProtocolType = (PyTypeObject *)type; + state->PrepareProtocolType = type; return 0; } diff --git a/Modules/_sqlite/row.c b/Modules/_sqlite/row.c index 1a1943285ce008..28d403fc00ad91 100644 --- a/Modules/_sqlite/row.c +++ b/Modules/_sqlite/row.c @@ -266,11 +266,12 @@ static PyType_Spec row_spec = { int pysqlite_row_setup_types(PyObject *module) { - PyObject *type = PyType_FromModuleAndSpec(module, &row_spec, NULL); + PyTypeObject *type; + type = (PyTypeObject *)PyType_FromModuleAndSpec(module, &row_spec, NULL); if (type == NULL) { return -1; } pysqlite_state *state = pysqlite_get_state(module); - state->RowType = (PyTypeObject *)type; + state->RowType = type; return 0; } diff --git a/Modules/_sqlite/statement.c b/Modules/_sqlite/statement.c index 66fadb63e53ca4..a4ed17874159ec 100644 --- a/Modules/_sqlite/statement.c +++ b/Modules/_sqlite/statement.c @@ -493,11 +493,12 @@ static PyType_Spec stmt_spec = { int pysqlite_statement_setup_types(PyObject *module) { - PyObject *type = PyType_FromModuleAndSpec(module, &stmt_spec, NULL); + PyTypeObject *type; + type = (PyTypeObject *)PyType_FromModuleAndSpec(module, &stmt_spec, NULL); if (type == NULL) { return -1; } pysqlite_state *state = pysqlite_get_state(module); - state->StatementType = (PyTypeObject *)type; + state->StatementType = type; return 0; } diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index 7369f094faedde..3965a125b21742 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -1151,11 +1151,11 @@ test_get_type_name(PyObject *self, PyObject *Py_UNUSED(ignored)) assert(strcmp(PyUnicode_AsUTF8(tp_name), "module") == 0); Py_DECREF(tp_name); - PyObject *HeapTypeNameType = PyType_FromSpec(&HeapTypeNameType_Spec); + PyTypeObject *HeapTypeNameType = (PyTypeObject *)PyType_FromSpec(&HeapTypeNameType_Spec); if (HeapTypeNameType == NULL) { Py_RETURN_NONE; } - tp_name = PyType_GetName((PyTypeObject *)HeapTypeNameType); + tp_name = PyType_GetName(HeapTypeNameType); assert(strcmp(PyUnicode_AsUTF8(tp_name), "HeapTypeNameType") == 0); Py_DECREF(tp_name); @@ -1163,11 +1163,11 @@ test_get_type_name(PyObject *self, PyObject *Py_UNUSED(ignored)) if (name == NULL) { goto done; } - if (PyObject_SetAttrString(HeapTypeNameType, "__name__", name) < 0) { + if (PyObject_SetAttrString((PyObject*)HeapTypeNameType, "__name__", name) < 0) { Py_DECREF(name); goto done; } - tp_name = PyType_GetName((PyTypeObject *)HeapTypeNameType); + tp_name = PyType_GetName(HeapTypeNameType); assert(strcmp(PyUnicode_AsUTF8(tp_name), "test_name") == 0); Py_DECREF(name); Py_DECREF(tp_name); @@ -1309,11 +1309,11 @@ test_get_type_qualname(PyObject *self, PyObject *Py_UNUSED(ignored)) assert(strcmp(PyUnicode_AsUTF8(tp_qualname), "OrderedDict") == 0); Py_DECREF(tp_qualname); - PyObject *HeapTypeNameType = PyType_FromSpec(&HeapTypeNameType_Spec); + PyTypeObject *HeapTypeNameType = (PyTypeObject *)PyType_FromSpec(&HeapTypeNameType_Spec); if (HeapTypeNameType == NULL) { Py_RETURN_NONE; } - tp_qualname = PyType_GetQualName((PyTypeObject *)HeapTypeNameType); + tp_qualname = PyType_GetQualName(HeapTypeNameType); assert(strcmp(PyUnicode_AsUTF8(tp_qualname), "HeapTypeNameType") == 0); Py_DECREF(tp_qualname); @@ -1321,12 +1321,12 @@ test_get_type_qualname(PyObject *self, PyObject *Py_UNUSED(ignored)) if (spec_name == NULL) { goto done; } - if (PyObject_SetAttrString(HeapTypeNameType, + if (PyObject_SetAttrString((PyObject*)HeapTypeNameType, "__qualname__", spec_name) < 0) { Py_DECREF(spec_name); goto done; } - tp_qualname = PyType_GetQualName((PyTypeObject *)HeapTypeNameType); + tp_qualname = PyType_GetQualName(HeapTypeNameType); assert(strcmp(PyUnicode_AsUTF8(tp_qualname), "_testcapi.HeapTypeNameType") == 0); Py_DECREF(spec_name); diff --git a/Modules/_zoneinfo.c b/Modules/_zoneinfo.c index 1535721b026d1f..d9e4c8940059ef 100644 --- a/Modules/_zoneinfo.c +++ b/Modules/_zoneinfo.c @@ -397,7 +397,7 @@ zoneinfo_no_cache(PyTypeObject *cls, PyObject *args, PyObject *kwargs) } static PyObject * -zoneinfo_clear_cache(PyObject *cls, PyObject *args, PyObject *kwargs) +zoneinfo_clear_cache(PyTypeObject *type, PyObject *args, PyObject *kwargs) { PyObject *only_keys = NULL; static char *kwlist[] = {"only_keys", NULL}; @@ -407,7 +407,6 @@ zoneinfo_clear_cache(PyObject *cls, PyObject *args, PyObject *kwargs) return NULL; } - PyTypeObject *type = (PyTypeObject *)cls; PyObject *weak_cache = get_weak_cache(type); if (only_keys == NULL || only_keys == Py_None) {