From aa9dbb1b033a8163e07fcf5763fc20146354cc48 Mon Sep 17 00:00:00 2001
From: Paul Sokolovsky <pfalcon@users.sourceforge.net>
Date: Mon, 11 May 2015 02:59:25 +0300
Subject: [PATCH] objgenerator: If generator yielded STOP_ITERATION value, it's
 stopped.

MP_OBJ_STOP_ITERATION is equivalent of raising StopIteration, except
mp_vm_return_kind_t for it is "yield".
---
 py/objgenerator.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/py/objgenerator.c b/py/objgenerator.c
index 3bf29732e..0f0f84249 100644
--- a/py/objgenerator.c
+++ b/py/objgenerator.c
@@ -134,6 +134,9 @@ mp_vm_return_kind_t mp_obj_gen_resume(mp_obj_t self_in, mp_obj_t send_value, mp_
 
         case MP_VM_RETURN_YIELD:
             *ret_val = *self->code_state.sp;
+            if (*ret_val == MP_OBJ_STOP_ITERATION) {
+                self->code_state.ip = 0;
+            }
             break;
 
         case MP_VM_RETURN_EXCEPTION:
-- 
GitLab