@@ -48,6 +48,10 @@ static jmethodID Class_getConstructors_mid;
4848static jmethodID Method_getName_mid ;
4949static jmethodID Method_toString_mid ;
5050
51+ static jclass List_class ;
52+ static jmethodID List_get_mid ;
53+ static jmethodID List_set_mid ;
54+
5155STATIC const mp_obj_type_t jobject_type ;
5256STATIC const mp_obj_type_t jmethod_type ;
5357
@@ -167,11 +171,36 @@ STATIC void jobject_attr(mp_obj_t self_in, qstr attr_in, mp_obj_t *dest) {
167171 }
168172}
169173
174+ STATIC mp_obj_t jobject_subscr (mp_obj_t self_in , mp_obj_t index , mp_obj_t value ) {
175+ mp_obj_jobject_t * self = self_in ;
176+ if (!JJ (IsInstanceOf , self -> obj , List_class )) {
177+ return MP_OBJ_NULL ;
178+ }
179+
180+ mp_uint_t idx = mp_obj_get_int (index );
181+
182+ if (value == MP_OBJ_NULL ) {
183+ // delete
184+ assert (0 );
185+ } else if (value == MP_OBJ_SENTINEL ) {
186+ // load
187+ jobject el = JJ (CallObjectMethod , self -> obj , List_get_mid , idx );
188+ return new_jobject (el );
189+ } else {
190+ // store
191+ assert (0 );
192+ }
193+
194+
195+ return MP_OBJ_NULL ;
196+ }
197+
170198STATIC const mp_obj_type_t jobject_type = {
171199 { & mp_type_type },
172200 .name = MP_QSTR_jobject ,
173201 .print = jobject_print ,
174202 .attr = jobject_attr ,
203+ .subscr = jobject_subscr ,
175204// .locals_dict = (mp_obj_t)&jobject_locals_dict,
176205};
177206
@@ -414,6 +443,12 @@ STATIC void create_jvm() {
414443 "()Ljava/lang/String;" );
415444 Method_toString_mid = (* env )-> GetMethodID (env , method_class , "toString" ,
416445 "()Ljava/lang/String;" );
446+
447+ List_class = JJ (FindClass , "java/util/List" );
448+ List_get_mid = JJ (GetMethodID , List_class , "get" ,
449+ "(I)Ljava/lang/Object;" );
450+ List_set_mid = JJ (GetMethodID , List_class , "set" ,
451+ "(ILjava/lang/Object;)Ljava/lang/Object;" );
417452}
418453
419454STATIC mp_obj_t mod_jni_cls (mp_obj_t cls_name_in ) {
0 commit comments