Skip to content

Commit b5671c0

Browse files
committed
fully implement GC protocol for _tokenize.TokenizerIter
1 parent 2a54acf commit b5671c0

File tree

1 file changed

+15
-2
lines changed

1 file changed

+15
-2
lines changed

Python/Python-tokenize.c

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -351,17 +351,26 @@ tokenizeriter_next(PyObject *op)
351351
static void
352352
tokenizeriter_dealloc(PyObject *op)
353353
{
354+
PyTypeObject *tp = Py_TYPE(op);
355+
PyObject_GC_UnTrack(op);
354356
tokenizeriterobject *it = (tokenizeriterobject*)op;
355-
PyTypeObject *tp = Py_TYPE(it);
356357
Py_XDECREF(it->last_line);
357358
_PyTokenizer_Free(it->tok);
358359
tp->tp_free(it);
359360
Py_DECREF(tp);
360361
}
361362

363+
static int
364+
tokenizeriter_traverse(PyObject *op, visitproc visit, void *arg)
365+
{
366+
Py_VISIT(Py_TYPE(op));
367+
return 0;
368+
}
369+
362370
static PyType_Slot tokenizeriter_slots[] = {
363371
{Py_tp_new, tokenizeriter_new},
364372
{Py_tp_dealloc, tokenizeriter_dealloc},
373+
{Py_tp_traverse, tokenizeriter_traverse},
365374
{Py_tp_getattro, PyObject_GenericGetAttr},
366375
{Py_tp_iter, PyObject_SelfIter},
367376
{Py_tp_iternext, tokenizeriter_next},
@@ -371,7 +380,11 @@ static PyType_Slot tokenizeriter_slots[] = {
371380
static PyType_Spec tokenizeriter_spec = {
372381
.name = "_tokenize.TokenizerIter",
373382
.basicsize = sizeof(tokenizeriterobject),
374-
.flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_IMMUTABLETYPE),
383+
.flags = (
384+
Py_TPFLAGS_DEFAULT
385+
| Py_TPFLAGS_IMMUTABLETYPE
386+
| Py_TPFLAGS_HAVE_GC
387+
),
375388
.slots = tokenizeriter_slots,
376389
};
377390

0 commit comments

Comments
 (0)