Skip to content

Commit

Permalink
bpo-40077: Add traverse/clear/free to arraymodule (GH-24066)
Browse files Browse the repository at this point in the history
  • Loading branch information
Erlend Egeberg Aasland authored Jan 3, 2021
1 parent 6613676 commit b8eb376
Showing 1 changed file with 33 additions and 6 deletions.
39 changes: 33 additions & 6 deletions Modules/arraymodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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,
};


Expand Down

0 comments on commit b8eb376

Please sign in to comment.