From f7eaf605c0b52217ea45a1e0a33cbba3e0a8a2ab Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Sun, 30 Mar 2014 22:00:12 +0300 Subject: [PATCH] py: Fix "TypeError: 'iterator' object is not iterable", doh. --- py/objarray.c | 1 + py/objdict.c | 2 ++ py/objgetitemiter.c | 1 + py/objlist.c | 1 + py/objrange.c | 1 + py/objset.c | 1 + py/objstr.c | 2 ++ py/objtuple.c | 1 + tests/basics/iter-of-iter.py | 8 ++++++++ 9 files changed, 18 insertions(+) create mode 100644 tests/basics/iter-of-iter.py diff --git a/py/objarray.c b/py/objarray.c index ea8654b45..c91c553e3 100644 --- a/py/objarray.c +++ b/py/objarray.c @@ -219,6 +219,7 @@ STATIC mp_obj_t array_it_iternext(mp_obj_t self_in) { STATIC const mp_obj_type_t array_it_type = { { &mp_type_type }, .name = MP_QSTR_iterator, + .getiter = mp_identity, .iternext = array_it_iternext, }; diff --git a/py/objdict.c b/py/objdict.c index a9dbb76c4..01c7294a4 100644 --- a/py/objdict.c +++ b/py/objdict.c @@ -107,6 +107,7 @@ mp_obj_t dict_it_iternext(mp_obj_t self_in) { STATIC const mp_obj_type_t mp_type_dict_it = { { &mp_type_type }, .name = MP_QSTR_iterator, + .getiter = mp_identity, .iternext = dict_it_iternext, }; @@ -336,6 +337,7 @@ STATIC mp_obj_t dict_view_it_iternext(mp_obj_t self_in) { STATIC const mp_obj_type_t dict_view_it_type = { { &mp_type_type }, .name = MP_QSTR_iterator, + .getiter = mp_identity, .iternext = dict_view_it_iternext, }; diff --git a/py/objgetitemiter.c b/py/objgetitemiter.c index 09235640a..da0e4760c 100644 --- a/py/objgetitemiter.c +++ b/py/objgetitemiter.c @@ -38,6 +38,7 @@ STATIC mp_obj_t it_iternext(mp_obj_t self_in) { STATIC const mp_obj_type_t it_type = { { &mp_type_type }, .name = MP_QSTR_iterator, + .getiter = mp_identity, .iternext = it_iternext }; diff --git a/py/objlist.c b/py/objlist.c index 1030a862a..244d4a596 100644 --- a/py/objlist.c +++ b/py/objlist.c @@ -408,6 +408,7 @@ mp_obj_t list_it_iternext(mp_obj_t self_in) { STATIC const mp_obj_type_t mp_type_list_it = { { &mp_type_type }, .name = MP_QSTR_iterator, + .getiter = mp_identity, .iternext = list_it_iternext, }; diff --git a/py/objrange.c b/py/objrange.c index c527dfa89..64d92457b 100644 --- a/py/objrange.c +++ b/py/objrange.c @@ -63,6 +63,7 @@ STATIC mp_obj_t range_it_iternext(mp_obj_t o_in) { STATIC const mp_obj_type_t range_it_type = { { &mp_type_type }, .name = MP_QSTR_iterator, + .getiter = mp_identity, .iternext = range_it_iternext, }; diff --git a/py/objset.c b/py/objset.c index 2cabf6c50..439c6e96e 100644 --- a/py/objset.c +++ b/py/objset.c @@ -72,6 +72,7 @@ STATIC mp_obj_t set_make_new(mp_obj_t type_in, uint n_args, uint n_kw, const mp_ const mp_obj_type_t mp_type_set_it = { { &mp_type_type }, .name = MP_QSTR_iterator, + .getiter = mp_identity, .iternext = set_it_iternext, }; diff --git a/py/objstr.c b/py/objstr.c index 2dd7015c5..751f93afd 100644 --- a/py/objstr.c +++ b/py/objstr.c @@ -885,6 +885,7 @@ STATIC mp_obj_t str_it_iternext(mp_obj_t self_in) { STATIC const mp_obj_type_t mp_type_str_it = { { &mp_type_type }, .name = MP_QSTR_iterator, + .getiter = mp_identity, .iternext = str_it_iternext, }; @@ -903,6 +904,7 @@ STATIC mp_obj_t bytes_it_iternext(mp_obj_t self_in) { STATIC const mp_obj_type_t mp_type_bytes_it = { { &mp_type_type }, .name = MP_QSTR_iterator, + .getiter = mp_identity, .iternext = bytes_it_iternext, }; diff --git a/py/objtuple.c b/py/objtuple.c index 7f1450902..d6a5bb3d0 100644 --- a/py/objtuple.c +++ b/py/objtuple.c @@ -251,6 +251,7 @@ STATIC mp_obj_t tuple_it_iternext(mp_obj_t self_in) { STATIC const mp_obj_type_t mp_type_tuple_it = { { &mp_type_type }, .name = MP_QSTR_iterator, + .getiter = mp_identity, .iternext = tuple_it_iternext, }; diff --git a/tests/basics/iter-of-iter.py b/tests/basics/iter-of-iter.py new file mode 100644 index 000000000..93368612b --- /dev/null +++ b/tests/basics/iter-of-iter.py @@ -0,0 +1,8 @@ +i = iter(iter((1, 2, 3))) +print(list(i)) +i = iter(iter([1, 2, 3])) +print(list(i)) +i = iter(iter({1:2, 3:4, 5:6})) +print(list(i)) +i = iter(iter({1, 2, 3})) +print(list(i))