[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