@@ -351,17 +351,26 @@ tokenizeriter_next(PyObject *op)
351351static void
352352tokenizeriter_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+
362370static 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[] = {
371380static 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