mirror of https://github.com/KLayout/klayout.git
Fixed #261 (iterator must not be incremented while value is used)
This commit is contained in:
parent
42cb95188d
commit
0bde41446a
|
|
@ -357,7 +357,18 @@ pya_plain_iterator_next (PyObject *self)
|
|||
{
|
||||
PYAIteratorObject *iter = (PYAIteratorObject *) self;
|
||||
|
||||
if (! iter->iter || iter->iter->at_end ()) {
|
||||
if (! iter->iter) {
|
||||
PyErr_SetNone (PyExc_StopIteration);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// increment on first visit
|
||||
if (! iter->first) {
|
||||
iter->iter->inc ();
|
||||
}
|
||||
iter->first = false;
|
||||
|
||||
if (iter->iter->at_end ()) {
|
||||
PyErr_SetNone (PyExc_StopIteration);
|
||||
return NULL;
|
||||
}
|
||||
|
|
@ -369,8 +380,6 @@ pya_plain_iterator_next (PyObject *self)
|
|||
iter->iter->get (args);
|
||||
PythonRef obj = pop_arg (*iter->value_type, args, 0, heap);
|
||||
|
||||
iter->iter->inc ();
|
||||
|
||||
return obj.release ();
|
||||
}
|
||||
|
||||
|
|
@ -426,6 +435,7 @@ PYAIteratorObject::create (PyObject *origin, gsi::IterAdaptorAbstractBase *iter,
|
|||
iter_obj->origin = origin;
|
||||
iter_obj->iter = iter;
|
||||
iter_obj->value_type = value_type;
|
||||
iter_obj->first = true;
|
||||
}
|
||||
return iter_obj;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -101,6 +101,7 @@ struct PYAIteratorObject
|
|||
static PYAIteratorObject *create (PyObject *origin, gsi::IterAdaptorAbstractBase *iter, const gsi::ArgType *value_type);
|
||||
|
||||
PyObject *origin;
|
||||
bool first;
|
||||
gsi::IterAdaptorAbstractBase *iter;
|
||||
const gsi::ArgType *value_type;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue