+ no_ptr = fn_arg.replace('*', '')
+ if var_is_arr is not None or ret_arr_len is not None:
+ out_java.write("[] ")
+ out_c.write("Array ")
+ if var_is_arr is not None:
+ arr_name = var_is_arr.group(1)
+ arr_len = var_is_arr.group(2)
+ out_java.write(arr_name)
+ out_c.write(arr_name)
+ else:
+ arr_name = "ret"
+ arr_len = ret_arr_len
+ assert(c_ty == "jbyte")
+ return ("unsigned char " + arr_name + "_arr[" + arr_len + "];\n" +
+ "(*_env)->GetByteArrayRegion (_env, """ + arr_name + ", 0, " + arr_len + ", " + arr_name + "_arr);\n" +
+ "unsigned char (*""" + arr_name + "_ref)[" + arr_len + "] = &" + arr_name + "_arr;",
+ (c_ty + "Array " + arr_name + "_arr = (*_env)->NewByteArray(_env, 0); // XXX: len 0\n" +
+ "(*_env)->SetByteArrayRegion(_env, " + arr_name + "_arr, 0, " + arr_len + ", *",
+ ");\nreturn ret_arr;"),
+ arr_name + "_ref")
+ elif no_ptr.strip() != "":
+ # If we have a parameter name, print it (noting that it may indicate its a pointer)
+ out_java.write(" " + no_ptr.strip())
+ out_c.write(" " + no_ptr.strip())
+ if is_ptr_to_obj is not None:
+ if no_ptr == fn_arg:
+ return (is_ptr_to_obj + " " + no_ptr.strip() + "_conv = *(" + is_ptr_to_obj + "*)" + no_ptr.strip() + ";",
+ "XXX2", no_ptr.strip() + "_conv")
+ else:
+ return (is_ptr_to_obj + "* " + no_ptr.strip() + "_conv = (" + is_ptr_to_obj + "*)" + no_ptr.strip() + ";",
+ "XXX2", no_ptr.strip() + "_conv")
+ elif no_ptr != fn_arg:
+ return ("YYY1", "XXX3", no_ptr.strip())
+ else:
+ return (None, "XXX4", no_ptr.strip())