summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Sokolovsky <pfalcon@users.sourceforge.net>2015-05-10 00:41:34 +0300
committerPaul Sokolovsky <pfalcon@users.sourceforge.net>2015-05-10 00:41:49 +0300
commit4ed7b7f751b161420e6979927fd0756467a10cb7 (patch)
tree1c1d484269c9a5afe6886d1cf13ec1ea3c5b3f4c
parenta37d13c95d1e91bc278ff01e8315d8389a218828 (diff)
py: iternext() may not return MP_OBJ_NULL, only MP_OBJ_STOP_ITERATION.
Testing for incorrect value led to premature termination of generator containing yield from for such iterator (e.g. "yield from [1, 2]").
-rw-r--r--py/runtime.c2
-rw-r--r--tests/basics/gen_yield_from_iter.py5
2 files changed, 6 insertions, 1 deletions
diff --git a/py/runtime.c b/py/runtime.c
index 2b5b5bc37..68728642b 100644
--- a/py/runtime.c
+++ b/py/runtime.c
@@ -1081,7 +1081,7 @@ mp_vm_return_kind_t mp_resume(mp_obj_t self_in, mp_obj_t send_value, mp_obj_t th
if (type->iternext != NULL && send_value == mp_const_none) {
mp_obj_t ret = type->iternext(self_in);
- if (ret != MP_OBJ_NULL) {
+ if (ret != MP_OBJ_STOP_ITERATION) {
*ret_val = ret;
return MP_VM_RETURN_YIELD;
} else {
diff --git a/tests/basics/gen_yield_from_iter.py b/tests/basics/gen_yield_from_iter.py
index 2d06328fb..be76572bf 100644
--- a/tests/basics/gen_yield_from_iter.py
+++ b/tests/basics/gen_yield_from_iter.py
@@ -4,5 +4,10 @@ def gen():
def gen2():
yield from gen()
+def gen3():
+ yield from (4, 5)
+ yield 6
+
print(list(gen()))
print(list(gen2()))
+print(list(gen3()))