diff options
author | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2014-03-30 23:14:55 +0300 |
---|---|---|
committer | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2014-03-30 23:30:16 +0300 |
commit | f39d3b93da4b9205a095430e12472051c6b22ef6 (patch) | |
tree | b2f56443f9646bef8035b4a527f1d1f533e6196e /py/objgenerator.c | |
parent | a30cf9f3aff671ada1c84a1977ecf96d473d7256 (diff) |
py: Implement support for generalized generator protocol.
Iterators and ducktype objects can now be arguments of yield from.
Diffstat (limited to 'py/objgenerator.c')
-rw-r--r-- | py/objgenerator.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/py/objgenerator.c b/py/objgenerator.c index d1bae30de..c3d7f12d7 100644 --- a/py/objgenerator.c +++ b/py/objgenerator.c @@ -135,7 +135,14 @@ STATIC mp_obj_t gen_resume_and_raise(mp_obj_t self_in, mp_obj_t send_value, mp_o return ret; case MP_VM_RETURN_EXCEPTION: - nlr_jump(ret); + // TODO: Optimization of returning MP_OBJ_NULL is really part + // of mp_iternext() protocol, but this function is called by other methods + // too, which may not handled MP_OBJ_NULL. + if (mp_obj_is_subclass_fast(mp_obj_get_type(ret), &mp_type_StopIteration)) { + return MP_OBJ_NULL; + } else { + nlr_jump(ret); + } default: assert(0); |