@@ -655,38 +655,46 @@ STATIC mp_obj_t mod_jni_cls(mp_obj_t cls_name_in) {
655655MP_DEFINE_CONST_FUN_OBJ_1 (mod_jni_cls_obj , mod_jni_cls );
656656
657657STATIC 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