From dc6c014d7bf266f143d5e784bd51d05dc0425883 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sat, 18 Sep 2021 18:24:44 +0300 Subject: [PATCH 1/2] Clean up initialization __class_getitem__ with Py_GenericAlias. The cast to PyCFunction is redundant. Overuse of redundant casts can hide actual bugs. --- Modules/_collectionsmodule.c | 4 ++-- Modules/_ctypes/_ctypes.c | 2 +- Modules/_functoolsmodule.c | 2 +- Modules/_queuemodule.c | 2 +- Modules/_sre.c | 4 ++-- Modules/itertoolsmodule.c | 2 +- Modules/posixmodule.c | 2 +- Objects/descrobject.c | 2 +- Objects/dictobject.c | 2 +- Objects/enumobject.c | 2 +- Objects/genobject.c | 2 +- Objects/listobject.c | 2 +- Objects/setobject.c | 4 ++-- Objects/tupleobject.c | 2 +- Objects/weakrefobject.c | 2 +- Python/context.c | 4 ++-- 16 files changed, 20 insertions(+), 20 deletions(-) diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 57e3464145be6d..01522cd4945875 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -1636,7 +1636,7 @@ static PyMethodDef deque_methods[] = { METH_FASTCALL, rotate_doc}, {"__sizeof__", (PyCFunction)deque_sizeof, METH_NOARGS, sizeof_doc}, - {"__class_getitem__", (PyCFunction)Py_GenericAlias, + {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, {NULL, NULL} /* sentinel */ }; @@ -2104,7 +2104,7 @@ static PyMethodDef defdict_methods[] = { defdict_copy_doc}, {"__reduce__", (PyCFunction)defdict_reduce, METH_NOARGS, reduce_doc}, - {"__class_getitem__", (PyCFunction)Py_GenericAlias, METH_O|METH_CLASS, + {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, {NULL} }; diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c index b31e912933450a..1d6358c9109824 100644 --- a/Modules/_ctypes/_ctypes.c +++ b/Modules/_ctypes/_ctypes.c @@ -4795,7 +4795,7 @@ Array_length(PyObject *myself) } static PyMethodDef Array_methods[] = { - {"__class_getitem__", (PyCFunction)Py_GenericAlias, + {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, { NULL, NULL } }; diff --git a/Modules/_functoolsmodule.c b/Modules/_functoolsmodule.c index a93c0be6a149af..d6dfefdd87767c 100644 --- a/Modules/_functoolsmodule.c +++ b/Modules/_functoolsmodule.c @@ -465,7 +465,7 @@ partial_setstate(partialobject *pto, PyObject *state) static PyMethodDef partial_methods[] = { {"__reduce__", (PyCFunction)partial_reduce, METH_NOARGS}, {"__setstate__", (PyCFunction)partial_setstate, METH_O}, - {"__class_getitem__", (PyCFunction)Py_GenericAlias, + {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, {NULL, NULL} /* sentinel */ }; diff --git a/Modules/_queuemodule.c b/Modules/_queuemodule.c index a124255a72cae2..58772d7f0f5234 100644 --- a/Modules/_queuemodule.c +++ b/Modules/_queuemodule.c @@ -356,7 +356,7 @@ static PyMethodDef simplequeue_methods[] = { _QUEUE_SIMPLEQUEUE_PUT_METHODDEF _QUEUE_SIMPLEQUEUE_PUT_NOWAIT_METHODDEF _QUEUE_SIMPLEQUEUE_QSIZE_METHODDEF - {"__class_getitem__", (PyCFunction)Py_GenericAlias, + {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, {NULL, NULL} /* sentinel */ }; diff --git a/Modules/_sre.c b/Modules/_sre.c index d863ae0264b547..f4ec862dcabf0d 100644 --- a/Modules/_sre.c +++ b/Modules/_sre.c @@ -2708,7 +2708,7 @@ static PyMethodDef pattern_methods[] = { _SRE_SRE_PATTERN_SCANNER_METHODDEF _SRE_SRE_PATTERN___COPY___METHODDEF _SRE_SRE_PATTERN___DEEPCOPY___METHODDEF - {"__class_getitem__", (PyCFunction)Py_GenericAlias, METH_O|METH_CLASS, + {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, {NULL, NULL} }; @@ -2764,7 +2764,7 @@ static PyMethodDef match_methods[] = { _SRE_SRE_MATCH_EXPAND_METHODDEF _SRE_SRE_MATCH___COPY___METHODDEF _SRE_SRE_MATCH___DEEPCOPY___METHODDEF - {"__class_getitem__", (PyCFunction)Py_GenericAlias, METH_O|METH_CLASS, + {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, {NULL, NULL} }; diff --git a/Modules/itertoolsmodule.c b/Modules/itertoolsmodule.c index ec0aa76fa5794c..0df179673a1114 100644 --- a/Modules/itertoolsmodule.c +++ b/Modules/itertoolsmodule.c @@ -2165,7 +2165,7 @@ static PyMethodDef chain_methods[] = { reduce_doc}, {"__setstate__", (PyCFunction)chain_setstate, METH_O, setstate_doc}, - {"__class_getitem__", (PyCFunction)Py_GenericAlias, + {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, {NULL, NULL} /* sentinel */ }; diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 609f10ba3bd975..bd38bea4c6c99d 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -13779,7 +13779,7 @@ static PyMethodDef DirEntry_methods[] = { OS_DIRENTRY_STAT_METHODDEF OS_DIRENTRY_INODE_METHODDEF OS_DIRENTRY___FSPATH___METHODDEF - {"__class_getitem__", (PyCFunction)Py_GenericAlias, + {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, {NULL} }; diff --git a/Objects/descrobject.c b/Objects/descrobject.c index 0565992bdb79f7..4ed36e94b3f79a 100644 --- a/Objects/descrobject.c +++ b/Objects/descrobject.c @@ -1144,7 +1144,7 @@ static PyMethodDef mappingproxy_methods[] = { PyDoc_STR("D.items() -> list of D's (key, value) pairs, as 2-tuples")}, {"copy", (PyCFunction)mappingproxy_copy, METH_NOARGS, PyDoc_STR("D.copy() -> a shallow copy of D")}, - {"__class_getitem__", (PyCFunction)Py_GenericAlias, METH_O|METH_CLASS, + {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, {"__reversed__", (PyCFunction)mappingproxy_reversed, METH_NOARGS, PyDoc_STR("D.__reversed__() -> reverse iterator")}, diff --git a/Objects/dictobject.c b/Objects/dictobject.c index 85122eca7b7df3..ae0098be5b5478 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -3294,7 +3294,7 @@ static PyMethodDef mapp_methods[] = { {"copy", (PyCFunction)dict_copy, METH_NOARGS, copy__doc__}, DICT___REVERSED___METHODDEF - {"__class_getitem__", (PyCFunction)Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, + {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, {NULL, NULL} /* sentinel */ }; diff --git a/Objects/enumobject.c b/Objects/enumobject.c index 98ece3f13fc6fb..0ebaf5ea1fc797 100644 --- a/Objects/enumobject.c +++ b/Objects/enumobject.c @@ -213,7 +213,7 @@ PyDoc_STRVAR(reduce_doc, "Return state information for pickling."); static PyMethodDef enum_methods[] = { {"__reduce__", (PyCFunction)enum_reduce, METH_NOARGS, reduce_doc}, - {"__class_getitem__", (PyCFunction)Py_GenericAlias, + {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, {NULL, NULL} /* sentinel */ }; diff --git a/Objects/genobject.c b/Objects/genobject.c index 7a687ce7f7cdfb..be9238d9b6cfd3 100644 --- a/Objects/genobject.c +++ b/Objects/genobject.c @@ -1499,7 +1499,7 @@ static PyMethodDef async_gen_methods[] = { {"asend", (PyCFunction)async_gen_asend, METH_O, async_asend_doc}, {"athrow",(PyCFunction)async_gen_athrow, METH_VARARGS, async_athrow_doc}, {"aclose", (PyCFunction)async_gen_aclose, METH_NOARGS, async_aclose_doc}, - {"__class_getitem__", (PyCFunction)Py_GenericAlias, + {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, {NULL, NULL} /* Sentinel */ }; diff --git a/Objects/listobject.c b/Objects/listobject.c index 565c11e7f384fe..e7c4742f1db456 100644 --- a/Objects/listobject.c +++ b/Objects/listobject.c @@ -2843,7 +2843,7 @@ static PyMethodDef list_methods[] = { LIST_COUNT_METHODDEF LIST_REVERSE_METHODDEF LIST_SORT_METHODDEF - {"__class_getitem__", (PyCFunction)Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, + {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, {NULL, NULL} /* sentinel */ }; diff --git a/Objects/setobject.c b/Objects/setobject.c index af521b2baca41f..a3cdd33664d089 100644 --- a/Objects/setobject.c +++ b/Objects/setobject.c @@ -2047,7 +2047,7 @@ static PyMethodDef set_methods[] = { union_doc}, {"update", (PyCFunction)set_update, METH_VARARGS, update_doc}, - {"__class_getitem__", (PyCFunction)Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, + {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, {NULL, NULL} /* sentinel */ }; @@ -2161,7 +2161,7 @@ static PyMethodDef frozenset_methods[] = { symmetric_difference_doc}, {"union", (PyCFunction)set_union, METH_VARARGS, union_doc}, - {"__class_getitem__", (PyCFunction)Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, + {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, {NULL, NULL} /* sentinel */ }; diff --git a/Objects/tupleobject.c b/Objects/tupleobject.c index b7fd421196ddaa..3e3aea47cc2ab3 100644 --- a/Objects/tupleobject.c +++ b/Objects/tupleobject.c @@ -887,7 +887,7 @@ static PyMethodDef tuple_methods[] = { TUPLE___GETNEWARGS___METHODDEF TUPLE_INDEX_METHODDEF TUPLE_COUNT_METHODDEF - {"__class_getitem__", (PyCFunction)Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, + {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, {NULL, NULL} /* sentinel */ }; diff --git a/Objects/weakrefobject.c b/Objects/weakrefobject.c index bb56c7dbdb8322..89227689752213 100644 --- a/Objects/weakrefobject.c +++ b/Objects/weakrefobject.c @@ -363,7 +363,7 @@ static PyMemberDef weakref_members[] = { }; static PyMethodDef weakref_methods[] = { - {"__class_getitem__", (PyCFunction)Py_GenericAlias, + {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, {NULL} /* Sentinel */ }; diff --git a/Python/context.c b/Python/context.c index bf2ba93c14eb8f..9560fb3f6676e0 100644 --- a/Python/context.c +++ b/Python/context.c @@ -1049,7 +1049,7 @@ static PyMethodDef PyContextVar_methods[] = { _CONTEXTVARS_CONTEXTVAR_GET_METHODDEF _CONTEXTVARS_CONTEXTVAR_SET_METHODDEF _CONTEXTVARS_CONTEXTVAR_RESET_METHODDEF - {"__class_getitem__", (PyCFunction)Py_GenericAlias, + {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, {NULL, NULL} }; @@ -1190,7 +1190,7 @@ static PyGetSetDef PyContextTokenType_getsetlist[] = { }; static PyMethodDef PyContextTokenType_methods[] = { - {"__class_getitem__", (PyCFunction)Py_GenericAlias, + {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, {NULL} }; From 2e8fefa84126a76f88f47889d213fc0f544a3a93 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sun, 19 Sep 2021 17:31:14 +0300 Subject: [PATCH 2/2] Update docs. --- Doc/c-api/typehints.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Doc/c-api/typehints.rst b/Doc/c-api/typehints.rst index dfda96a47243bd..8b0b9b651e80e6 100644 --- a/Doc/c-api/typehints.rst +++ b/Doc/c-api/typehints.rst @@ -31,7 +31,7 @@ two types exist -- :ref:`GenericAlias ` and static PyMethodDef my_obj_methods[] = { // Other methods. ... - {"__class_getitem__", (PyCFunction)Py_GenericAlias, METH_O|METH_CLASS, "See PEP 585"} + {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, "See PEP 585"} ... }