Skip to content

Commit e554309

Browse files
committed
Implement tp_clear; set StopIteration explicitly; add curly braces
1 parent 06308d2 commit e554309

File tree

1 file changed

+11
-1
lines changed

1 file changed

+11
-1
lines changed

Objects/genericaliasobject.c

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -644,6 +644,7 @@ static PyNumberMethods ga_as_number = {
644644
static PyObject *
645645
ga_iternext(gaiterobject *gi) {
646646
if (gi->obj == NULL) {
647+
PyErr_SetNone(PyExc_StopIteration);
647648
return NULL;
648649
}
649650
gaobject *alias = (gaobject *)gi->obj;
@@ -670,6 +671,13 @@ ga_iter_traverse(gaiterobject *gi, visitproc visit, void *arg)
670671
return 0;
671672
}
672673

674+
static int
675+
ga_iter_clear(PyObject *self) {
676+
gaiterobject *gi = (gaiterobject *)self;
677+
Py_CLEAR(gi->obj);
678+
return 0;
679+
}
680+
673681
static PyTypeObject Py_GenericAliasIterType = {
674682
PyVarObject_HEAD_INIT(&PyType_Type, 0)
675683
.tp_name = "generic_alias_iterator",
@@ -678,14 +686,16 @@ static PyTypeObject Py_GenericAliasIterType = {
678686
.tp_iternext = (iternextfunc)ga_iternext,
679687
.tp_traverse = (traverseproc)ga_iter_traverse,
680688
.tp_dealloc = (destructor)ga_iter_dealloc,
689+
.tp_clear = (inquiry)ga_iter_clear,
681690
.tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,
682691
};
683692

684693
static PyObject *
685694
ga_iter(PyObject *self) {
686695
gaiterobject *gi = PyObject_GC_New(gaiterobject, &Py_GenericAliasIterType);
687-
if (gi == NULL)
696+
if (gi == NULL) {
688697
return NULL;
698+
}
689699
gi->obj = Py_NewRef(self);
690700
PyObject_GC_Track(gi);
691701
return (PyObject *)gi;

0 commit comments

Comments
 (0)