From 941049404ba16f0e550f6233b0072131606e927c Mon Sep 17 00:00:00 2001 From: "Erlend E. Aasland" Date: Sun, 3 Jan 2021 00:21:59 +0100 Subject: [PATCH 1/2] bpo-40077: Add traverse/clear/free to arraymodule --- Modules/arraymodule.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c index 12bd51705579bd..0f398ae33c2227 100644 --- a/Modules/arraymodule.c +++ b/Modules/arraymodule.c @@ -2977,6 +2977,30 @@ static PyType_Spec arrayiter_spec = { /*********************** Install Module **************************/ +static int +array_traverse(PyObject *m, visitproc visit, void *arg) +{ + array_state *state = get_array_state(m); + Py_VISIT(state->ArrayType); + Py_VISIT(state->ArrayIterType); + return 0; +} + +static int +array_clear(PyObject *m) +{ + array_state *state = get_array_state(m); + Py_CLEAR(state->ArrayType); + Py_CLEAR(state->ArrayIterType); + return 0; +} + +static void +array_free(void *m) +{ + array_clear((PyObject *)m); +} + /* No functions in array module. */ static PyMethodDef a_methods[] = { ARRAY__ARRAY_RECONSTRUCTOR_METHODDEF @@ -3059,6 +3083,9 @@ static struct PyModuleDef arraymodule = { .m_doc = module_doc, .m_methods = a_methods, .m_slots = arrayslots, + .m_traverse = array_traverse, + .m_clear = array_clear, + .m_free = array_free, }; From 8062a991891e87efc1154474a630aac58bb27640 Mon Sep 17 00:00:00 2001 From: "Erlend E. Aasland" Date: Sun, 3 Jan 2021 10:35:05 +0100 Subject: [PATCH 2/2] Address review: m => module --- Modules/arraymodule.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c index 0f398ae33c2227..e7d5ab77a6d5cb 100644 --- a/Modules/arraymodule.c +++ b/Modules/arraymodule.c @@ -2978,27 +2978,27 @@ static PyType_Spec arrayiter_spec = { /*********************** Install Module **************************/ static int -array_traverse(PyObject *m, visitproc visit, void *arg) +array_traverse(PyObject *module, visitproc visit, void *arg) { - array_state *state = get_array_state(m); + array_state *state = get_array_state(module); Py_VISIT(state->ArrayType); Py_VISIT(state->ArrayIterType); return 0; } static int -array_clear(PyObject *m) +array_clear(PyObject *module) { - array_state *state = get_array_state(m); + array_state *state = get_array_state(module); Py_CLEAR(state->ArrayType); Py_CLEAR(state->ArrayIterType); return 0; } static void -array_free(void *m) +array_free(void *module) { - array_clear((PyObject *)m); + array_clear((PyObject *)module); } /* No functions in array module. */ @@ -3007,12 +3007,12 @@ static PyMethodDef a_methods[] = { {NULL, NULL, 0, NULL} /* Sentinel */ }; -#define CREATE_TYPE(module, type, spec) \ -do { \ - type = (PyTypeObject *)PyType_FromModuleAndSpec(m, spec, NULL); \ - if (type == NULL) { \ - return -1; \ - } \ +#define CREATE_TYPE(module, type, spec) \ +do { \ + type = (PyTypeObject *)PyType_FromModuleAndSpec(module, spec, NULL); \ + if (type == NULL) { \ + return -1; \ + } \ } while (0) static int