From fe29cc192dd47c236afe5e6daeb25636e45c1075 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Wed, 14 Oct 2015 00:35:28 +0300 Subject: [PATCH] unix/modjni: Add iteration support for Java List objects. Using generic iteration-via-subscription support (TODO: factor it out for reuse). --- unix/modjni.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/unix/modjni.c b/unix/modjni.c index ef416ee48e..808930fd33 100644 --- a/unix/modjni.c +++ b/unix/modjni.c @@ -274,6 +274,20 @@ STATIC mp_obj_t jobject_unary_op(mp_uint_t op, mp_obj_t self_in) { } } +// TODO: subscr_load_adaptor & subscr_getiter convenience functions +// should be moved to common location for reuse. +STATIC mp_obj_t subscr_load_adaptor(mp_obj_t self_in, mp_obj_t index_in) { + return mp_obj_subscr(self_in, index_in, MP_OBJ_SENTINEL); +} +MP_DEFINE_CONST_FUN_OBJ_2(subscr_load_adaptor_obj, subscr_load_adaptor); + +// .getiter special method which returns iterator which works in terms +// of object subscription. +STATIC mp_obj_t subscr_getiter(mp_obj_t self_in) { + mp_obj_t dest[2] = {(mp_obj_t)&subscr_load_adaptor_obj, self_in}; + return mp_obj_new_getitem_iter(dest); +} + STATIC const mp_obj_type_t jobject_type = { { &mp_type_type }, .name = MP_QSTR_jobject, @@ -281,6 +295,7 @@ STATIC const mp_obj_type_t jobject_type = { .unary_op = jobject_unary_op, .attr = jobject_attr, .subscr = jobject_subscr, + .getiter = subscr_getiter, // .locals_dict = (mp_obj_t)&jobject_locals_dict, };