Skip to content

Commit 5bf1b4e

Browse files
committed
unix/modjni: array(): Support creation of object arrays.
1 parent d08c9d3 commit 5bf1b4e

1 file changed

Lines changed: 36 additions & 28 deletions

File tree

unix/modjni.c

Lines changed: 36 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -655,38 +655,46 @@ STATIC mp_obj_t mod_jni_cls(mp_obj_t cls_name_in) {
655655
MP_DEFINE_CONST_FUN_OBJ_1(mod_jni_cls_obj, mod_jni_cls);
656656

657657
STATIC mp_obj_t mod_jni_array(mp_obj_t type_in, mp_obj_t size_in) {
658-
const char *type = mp_obj_str_get_str(type_in);
659-
mp_int_t size = mp_obj_get_int(size_in);
660658
if (!env) {
661659
create_jvm();
662660
}
663-
661+
mp_int_t size = mp_obj_get_int(size_in);
664662
jobject res = NULL;
665-
switch (*type) {
666-
case 'Z':
667-
res = JJ(NewBooleanArray, size);
668-
break;
669-
case 'B':
670-
res = JJ(NewByteArray, size);
671-
break;
672-
case 'C':
673-
res = JJ(NewCharArray, size);
674-
break;
675-
case 'S':
676-
res = JJ(NewShortArray, size);
677-
break;
678-
case 'I':
679-
res = JJ(NewIntArray, size);
680-
break;
681-
case 'J':
682-
res = JJ(NewLongArray, size);
683-
break;
684-
case 'F':
685-
res = JJ(NewFloatArray, size);
686-
break;
687-
case 'D':
688-
res = JJ(NewDoubleArray, size);
689-
break;
663+
664+
if (MP_OBJ_IS_TYPE(type_in, &jclass_type)) {
665+
666+
mp_obj_jclass_t *jcls = type_in;
667+
res = JJ(NewObjectArray, size, jcls->cls, NULL);
668+
669+
} else if (MP_OBJ_IS_STR(type_in)) {
670+
const char *type = mp_obj_str_get_str(type_in);
671+
switch (*type) {
672+
case 'Z':
673+
res = JJ(NewBooleanArray, size);
674+
break;
675+
case 'B':
676+
res = JJ(NewByteArray, size);
677+
break;
678+
case 'C':
679+
res = JJ(NewCharArray, size);
680+
break;
681+
case 'S':
682+
res = JJ(NewShortArray, size);
683+
break;
684+
case 'I':
685+
res = JJ(NewIntArray, size);
686+
break;
687+
case 'J':
688+
res = JJ(NewLongArray, size);
689+
break;
690+
case 'F':
691+
res = JJ(NewFloatArray, size);
692+
break;
693+
case 'D':
694+
res = JJ(NewDoubleArray, size);
695+
break;
696+
}
697+
690698
}
691699

692700
return new_jobject(res);

0 commit comments

Comments
 (0)