[Python-checkins] bpo-40077: Add traverse/clear/free to arraymodule (GH-24066)
encukou
webhook-mailer at python.org
Sun Jan 3 08:11:34 EST 2021
https://github.com/python/cpython/commit/b8eb3765908c0063f0739595ba4b296cc8863d19
commit: b8eb3765908c0063f0739595ba4b296cc8863d19
branch: master
author: Erlend Egeberg Aasland <erlend.aasland at innova.no>
committer: encukou <encukou at gmail.com>
date: 2021-01-03T14:11:15+01:00
summary:
bpo-40077: Add traverse/clear/free to arraymodule (GH-24066)
files:
M Modules/arraymodule.c
diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c
index 12bd51705579b..e7d5ab77a6d5c 100644
--- a/Modules/arraymodule.c
+++ b/Modules/arraymodule.c
@@ -2977,18 +2977,42 @@ static PyType_Spec arrayiter_spec = {
/*********************** Install Module **************************/
+static int
+array_traverse(PyObject *module, visitproc visit, void *arg)
+{
+ array_state *state = get_array_state(module);
+ Py_VISIT(state->ArrayType);
+ Py_VISIT(state->ArrayIterType);
+ return 0;
+}
+
+static int
+array_clear(PyObject *module)
+{
+ array_state *state = get_array_state(module);
+ Py_CLEAR(state->ArrayType);
+ Py_CLEAR(state->ArrayIterType);
+ return 0;
+}
+
+static void
+array_free(void *module)
+{
+ array_clear((PyObject *)module);
+}
+
/* No functions in array module. */
static PyMethodDef a_methods[] = {
ARRAY__ARRAY_RECONSTRUCTOR_METHODDEF
{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
@@ -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,
};
More information about the Python-checkins
mailing list