@@ -957,37 +957,31 @@ void mp_store_attr(mp_obj_t base, qstr attr, mp_obj_t value) {
957957
958958mp_obj_t mp_getiter (mp_obj_t o_in ) {
959959 assert (o_in );
960+
961+ // check for native getiter (corresponds to __iter__)
960962 mp_obj_type_t * type = mp_obj_get_type (o_in );
961963 if (type -> getiter != NULL ) {
962964 mp_obj_t iter = type -> getiter (o_in );
963- if (iter = = MP_OBJ_NULL ) {
964- goto not_iterable ;
965+ if (iter ! = MP_OBJ_NULL ) {
966+ return iter ;
965967 }
966- return iter ;
968+ }
969+
970+ // check for __getitem__
971+ mp_obj_t dest [2 ];
972+ mp_load_method_maybe (o_in , MP_QSTR___getitem__ , dest );
973+ if (dest [0 ] != MP_OBJ_NULL ) {
974+ // __getitem__ exists, create and return an iterator
975+ return mp_obj_new_getitem_iter (dest );
976+ }
977+
978+ // object not iterable
979+ if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE ) {
980+ nlr_raise (mp_obj_new_exception_msg (& mp_type_TypeError ,
981+ "object not iterable" ));
967982 } else {
968- // check for __iter__ method
969- mp_obj_t dest [2 ];
970- mp_load_method_maybe (o_in , MP_QSTR___iter__ , dest );
971- if (dest [0 ] != MP_OBJ_NULL ) {
972- // __iter__ exists, call it and return its result
973- return mp_call_method_n_kw (0 , 0 , dest );
974- } else {
975- mp_load_method_maybe (o_in , MP_QSTR___getitem__ , dest );
976- if (dest [0 ] != MP_OBJ_NULL ) {
977- // __getitem__ exists, create an iterator
978- return mp_obj_new_getitem_iter (dest );
979- } else {
980- // object not iterable
981- not_iterable :
982- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE ) {
983- nlr_raise (mp_obj_new_exception_msg (& mp_type_TypeError ,
984- "object not iterable" ));
985- } else {
986- nlr_raise (mp_obj_new_exception_msg_varg (& mp_type_TypeError ,
987- "'%s' object is not iterable" , mp_obj_get_type_str (o_in )));
988- }
989- }
990- }
983+ nlr_raise (mp_obj_new_exception_msg_varg (& mp_type_TypeError ,
984+ "'%s' object is not iterable" , mp_obj_get_type_str (o_in )));
991985 }
992986}
993987
0 commit comments