summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--unix/modjni.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/unix/modjni.c b/unix/modjni.c
index d5ad55eb5f..b4af9ca93c 100644
--- a/unix/modjni.c
+++ b/unix/modjni.c
@@ -354,29 +354,31 @@ STATIC mp_obj_t call_method(jobject obj, const char *name, jarray methods, bool
// printf("found!\n");
jmethodID method_id = JJ(FromReflectedMethod, meth);
jobject res;
+ mp_obj_t ret;
if (is_constr) {
- res = JJ(NewObjectA, obj, method_id, jargs);
JJ(ReleaseStringUTFChars, name_o, decl);
+ res = JJ(NewObjectA, obj, method_id, jargs);
return new_jobject(res);
} else {
if (MATCH(ret_type, "void")) {
JJ(CallVoidMethodA, obj, method_id, jargs);
- return mp_const_none;
+ ret = mp_const_none;
} else if (MATCH(ret_type, "int")) {
jint res = JJ(CallIntMethodA, obj, method_id, jargs);
- return mp_obj_new_int(res);
+ ret = mp_obj_new_int(res);
} else if (MATCH(ret_type, "boolean")) {
jboolean res = JJ(CallBooleanMethodA, obj, method_id, jargs);
- return mp_obj_new_bool(res);
+ ret = mp_obj_new_bool(res);
} else if (is_object_type(ret_type)) {
res = JJ(CallObjectMethodA, obj, method_id, jargs);
- mp_obj_t ret = jvalue2py(ret_type, res);
+ ret = new_jobject(res);
+ } else {
JJ(ReleaseStringUTFChars, name_o, decl);
- if (ret != MP_OBJ_NULL) {
- return ret;
- }
+ nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_TypeError, "cannot handle return type"));
}
- nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_TypeError, "cannot handle return type"));
+
+ JJ(ReleaseStringUTFChars, name_o, decl);
+ return ret;
}
}