Skip to content

Commit 7bd9dbf

Browse files
authored
gh-111178: Fix function signatures in moduleobject.c (#124900)
1 parent 9132148 commit 7bd9dbf

File tree

2 files changed

+45
-20
lines changed

2 files changed

+45
-20
lines changed

Include/internal/pycore_moduleobject.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ static inline PyObject* _PyModule_GetDict(PyObject *mod) {
4646
}
4747

4848
PyObject* _Py_module_getattro_impl(PyModuleObject *m, PyObject *name, int suppress);
49-
PyObject* _Py_module_getattro(PyModuleObject *m, PyObject *name);
49+
PyObject* _Py_module_getattro(PyObject *m, PyObject *name);
5050

5151
#ifdef __cplusplus
5252
}

Objects/moduleobject.c

+44-19
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@
1515
#include "osdefs.h" // MAXPATHLEN
1616

1717

18+
#define _PyModule_CAST(op) \
19+
(assert(PyModule_Check(op)), _Py_CAST(PyModuleObject*, (op)))
20+
21+
1822
static PyMemberDef module_members[] = {
1923
{"__dict__", _Py_T_OBJECT, offsetof(PyModuleObject, md_dict), Py_READONLY},
2024
{0}
@@ -225,7 +229,9 @@ _PyModule_CreateInitialized(PyModuleDef* module, int module_api_version)
225229
return NULL;
226230
}
227231
name = _PyImport_ResolveNameWithPackageContext(name);
228-
if ((m = (PyModuleObject*)PyModule_New(name)) == NULL)
232+
233+
m = (PyModuleObject*)PyModule_New(name);
234+
if (m == NULL)
229235
return NULL;
230236

231237
if (module->m_size > 0) {
@@ -758,22 +764,26 @@ module___init___impl(PyModuleObject *self, PyObject *name, PyObject *doc)
758764
}
759765

760766
static void
761-
module_dealloc(PyModuleObject *m)
767+
module_dealloc(PyObject *self)
762768
{
763-
int verbose = _Py_GetConfig()->verbose;
769+
PyModuleObject *m = _PyModule_CAST(self);
764770

765771
PyObject_GC_UnTrack(m);
772+
773+
int verbose = _Py_GetConfig()->verbose;
766774
if (verbose && m->md_name) {
767775
PySys_FormatStderr("# destroy %U\n", m->md_name);
768776
}
769777
if (m->md_weaklist != NULL)
770778
PyObject_ClearWeakRefs((PyObject *) m);
779+
771780
/* bpo-39824: Don't call m_free() if m_size > 0 and md_state=NULL */
772781
if (m->md_def && m->md_def->m_free
773782
&& (m->md_def->m_size <= 0 || m->md_state != NULL))
774783
{
775784
m->md_def->m_free(m);
776785
}
786+
777787
Py_XDECREF(m->md_dict);
778788
Py_XDECREF(m->md_name);
779789
if (m->md_state != NULL)
@@ -782,8 +792,9 @@ module_dealloc(PyModuleObject *m)
782792
}
783793

784794
static PyObject *
785-
module_repr(PyModuleObject *m)
795+
module_repr(PyObject *self)
786796
{
797+
PyModuleObject *m = _PyModule_CAST(self);
787798
PyInterpreterState *interp = _PyInterpreterState_GET();
788799
return _PyImport_ImportlibModuleRepr(interp, (PyObject *)m);
789800
}
@@ -1062,14 +1073,17 @@ _Py_module_getattro_impl(PyModuleObject *m, PyObject *name, int suppress)
10621073

10631074

10641075
PyObject*
1065-
_Py_module_getattro(PyModuleObject *m, PyObject *name)
1076+
_Py_module_getattro(PyObject *self, PyObject *name)
10661077
{
1078+
PyModuleObject *m = _PyModule_CAST(self);
10671079
return _Py_module_getattro_impl(m, name, 0);
10681080
}
10691081

10701082
static int
1071-
module_traverse(PyModuleObject *m, visitproc visit, void *arg)
1083+
module_traverse(PyObject *self, visitproc visit, void *arg)
10721084
{
1085+
PyModuleObject *m = _PyModule_CAST(self);
1086+
10731087
/* bpo-39824: Don't call m_traverse() if m_size > 0 and md_state=NULL */
10741088
if (m->md_def && m->md_def->m_traverse
10751089
&& (m->md_def->m_size <= 0 || m->md_state != NULL))
@@ -1078,13 +1092,16 @@ module_traverse(PyModuleObject *m, visitproc visit, void *arg)
10781092
if (res)
10791093
return res;
10801094
}
1095+
10811096
Py_VISIT(m->md_dict);
10821097
return 0;
10831098
}
10841099

10851100
static int
1086-
module_clear(PyModuleObject *m)
1101+
module_clear(PyObject *self)
10871102
{
1103+
PyModuleObject *m = _PyModule_CAST(self);
1104+
10881105
/* bpo-39824: Don't call m_clear() if m_size > 0 and md_state=NULL */
10891106
if (m->md_def && m->md_def->m_clear
10901107
&& (m->md_def->m_size <= 0 || m->md_state != NULL))
@@ -1149,8 +1166,10 @@ module_get_dict(PyModuleObject *m)
11491166
}
11501167

11511168
static PyObject *
1152-
module_get_annotate(PyModuleObject *m, void *Py_UNUSED(ignored))
1169+
module_get_annotate(PyObject *self, void *Py_UNUSED(ignored))
11531170
{
1171+
PyModuleObject *m = _PyModule_CAST(self);
1172+
11541173
PyObject *dict = module_get_dict(m);
11551174
if (dict == NULL) {
11561175
return NULL;
@@ -1168,12 +1187,14 @@ module_get_annotate(PyModuleObject *m, void *Py_UNUSED(ignored))
11681187
}
11691188

11701189
static int
1171-
module_set_annotate(PyModuleObject *m, PyObject *value, void *Py_UNUSED(ignored))
1190+
module_set_annotate(PyObject *self, PyObject *value, void *Py_UNUSED(ignored))
11721191
{
1192+
PyModuleObject *m = _PyModule_CAST(self);
11731193
if (value == NULL) {
11741194
PyErr_SetString(PyExc_TypeError, "cannot delete __annotate__ attribute");
11751195
return -1;
11761196
}
1197+
11771198
PyObject *dict = module_get_dict(m);
11781199
if (dict == NULL) {
11791200
return -1;
@@ -1200,8 +1221,10 @@ module_set_annotate(PyModuleObject *m, PyObject *value, void *Py_UNUSED(ignored)
12001221
}
12011222

12021223
static PyObject *
1203-
module_get_annotations(PyModuleObject *m, void *Py_UNUSED(ignored))
1224+
module_get_annotations(PyObject *self, void *Py_UNUSED(ignored))
12041225
{
1226+
PyModuleObject *m = _PyModule_CAST(self);
1227+
12051228
PyObject *dict = module_get_dict(m);
12061229
if (dict == NULL) {
12071230
return NULL;
@@ -1249,14 +1272,16 @@ module_get_annotations(PyModuleObject *m, void *Py_UNUSED(ignored))
12491272
}
12501273

12511274
static int
1252-
module_set_annotations(PyModuleObject *m, PyObject *value, void *Py_UNUSED(ignored))
1275+
module_set_annotations(PyObject *self, PyObject *value, void *Py_UNUSED(ignored))
12531276
{
1254-
int ret = -1;
1277+
PyModuleObject *m = _PyModule_CAST(self);
1278+
12551279
PyObject *dict = module_get_dict(m);
12561280
if (dict == NULL) {
12571281
return -1;
12581282
}
12591283

1284+
int ret = -1;
12601285
if (value != NULL) {
12611286
/* set */
12621287
ret = PyDict_SetItem(dict, &_Py_ID(__annotations__), value);
@@ -1282,8 +1307,8 @@ module_set_annotations(PyModuleObject *m, PyObject *value, void *Py_UNUSED(ignor
12821307

12831308

12841309
static PyGetSetDef module_getsets[] = {
1285-
{"__annotations__", (getter)module_get_annotations, (setter)module_set_annotations},
1286-
{"__annotate__", (getter)module_get_annotate, (setter)module_set_annotate},
1310+
{"__annotations__", module_get_annotations, module_set_annotations},
1311+
{"__annotate__", module_get_annotate, module_set_annotate},
12871312
{NULL}
12881313
};
12891314

@@ -1292,26 +1317,26 @@ PyTypeObject PyModule_Type = {
12921317
"module", /* tp_name */
12931318
sizeof(PyModuleObject), /* tp_basicsize */
12941319
0, /* tp_itemsize */
1295-
(destructor)module_dealloc, /* tp_dealloc */
1320+
module_dealloc, /* tp_dealloc */
12961321
0, /* tp_vectorcall_offset */
12971322
0, /* tp_getattr */
12981323
0, /* tp_setattr */
12991324
0, /* tp_as_async */
1300-
(reprfunc)module_repr, /* tp_repr */
1325+
module_repr, /* tp_repr */
13011326
0, /* tp_as_number */
13021327
0, /* tp_as_sequence */
13031328
0, /* tp_as_mapping */
13041329
0, /* tp_hash */
13051330
0, /* tp_call */
13061331
0, /* tp_str */
1307-
(getattrofunc)_Py_module_getattro, /* tp_getattro */
1332+
_Py_module_getattro, /* tp_getattro */
13081333
PyObject_GenericSetAttr, /* tp_setattro */
13091334
0, /* tp_as_buffer */
13101335
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
13111336
Py_TPFLAGS_BASETYPE, /* tp_flags */
13121337
module___init____doc__, /* tp_doc */
1313-
(traverseproc)module_traverse, /* tp_traverse */
1314-
(inquiry)module_clear, /* tp_clear */
1338+
module_traverse, /* tp_traverse */
1339+
module_clear, /* tp_clear */
13151340
0, /* tp_richcompare */
13161341
offsetof(PyModuleObject, md_weaklist), /* tp_weaklistoffset */
13171342
0, /* tp_iter */

0 commit comments

Comments
 (0)