py: Add MP_OBJ_STOP_ITERATION and make good use of it.

Also make consistent use of MP_OBJ_NOT_SUPPORTED and MP_OBJ_NULL.
This helps a lot in debugging and understanding of function API.
This commit is contained in:
Damien George
2014-04-17 23:19:36 +01:00
parent 1e935d8689
commit ea8d06c39d
28 changed files with 130 additions and 121 deletions

View File

@@ -30,16 +30,16 @@ STATIC mp_obj_t zip_iternext(mp_obj_t self_in) {
mp_obj_zip_t *self = self_in;
mp_obj_t *items;
if (self->n_iters == 0) {
return MP_OBJ_NULL;
return MP_OBJ_STOP_ITERATION;
}
mp_obj_t o = mp_obj_new_tuple(self->n_iters, NULL);
mp_obj_tuple_get(o, NULL, &items);
for (int i = 0; i < self->n_iters; i++) {
mp_obj_t next = mp_iternext(self->iters[i]);
if (next == MP_OBJ_NULL) {
if (next == MP_OBJ_STOP_ITERATION) {
mp_obj_tuple_del(o);
return MP_OBJ_NULL;
return MP_OBJ_STOP_ITERATION;
}
items[i] = next;
}