summaryrefslogtreecommitdiffstatshomepage
path: root/py/runtime.c
diff options
context:
space:
mode:
Diffstat (limited to 'py/runtime.c')
-rw-r--r--py/runtime.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/py/runtime.c b/py/runtime.c
index a2de2d75b1..8852b7d80d 100644
--- a/py/runtime.c
+++ b/py/runtime.c
@@ -884,9 +884,14 @@ void mp_store_attr(mp_obj_t base, qstr attr, mp_obj_t value) {
}
mp_obj_t mp_getiter(mp_obj_t o_in) {
+ assert(o_in);
mp_obj_type_t *type = mp_obj_get_type(o_in);
if (type->getiter != NULL) {
- return type->getiter(o_in);
+ mp_obj_t iter = type->getiter(o_in);
+ if (iter == MP_OBJ_NULL) {
+ goto not_iterable;
+ }
+ return iter;
} else {
// check for __iter__ method
mp_obj_t dest[2];
@@ -901,6 +906,7 @@ mp_obj_t mp_getiter(mp_obj_t o_in) {
return mp_obj_new_getitem_iter(dest);
} else {
// object not iterable
+not_iterable:
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_TypeError, "'%s' object is not iterable", mp_obj_get_type_str(o_in)));
}
}