X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=gen_type_mapping.py;h=c7f75484daa660529eb9b4bb7da81806e577d7d0;hb=8fbb9c1f80dbb3d3f5bd3472f2fa8053a8437141;hp=76510119d4fa63af06ecb4978bee3e5abebe24cc;hpb=4b75327c6b57b9819938eb0008667c86c39d6ca7;p=ldk-java diff --git a/gen_type_mapping.py b/gen_type_mapping.py index 76510119..c7f75484 100644 --- a/gen_type_mapping.py +++ b/gen_type_mapping.py @@ -183,12 +183,8 @@ class TypeMappingGenerator: to_hu_conv = None to_hu_conv_name = None if subty.to_hu_conv is not None: - base_ty = ty_info.subty.java_hu_ty.split("[")[0].split("<")[0] - to_hu_conv = self.consts.var_decl_statement(ty_info.java_hu_ty, conv_name + "_arr", "new " + base_ty + "[" + arr_name + ".length]") - if "[" in ty_info.subty.java_hu_ty.split("<")[0]: - # Do a bit of a dance to move any excess [] to the end - to_hu_conv += "[" + ty_info.subty.java_hu_ty.split("<")[0].split("[")[1] - to_hu_conv += ";\nfor (int " + idxc + " = 0; " + idxc + " < " + arr_name + ".length; " + idxc + "++) {\n" + to_hu_conv = self.consts.var_decl_statement(ty_info.java_hu_ty, conv_name + "_arr", self.consts.constr_hu_array(ty_info, arr_name + ".length")) + to_hu_conv += ";\n" + self.consts.for_n_in_range(idxc, "0", arr_name + ".length") + "\n" to_hu_conv += "\t" + self.consts.var_decl_statement(subty.java_ty, conv_name, arr_name + "[" + idxc + "]") + ";\n" to_hu_conv += "\t" + subty.to_hu_conv.replace("\n", "\n\t") + "\n" to_hu_conv += "\t" + conv_name + "_arr[" + idxc + "] = " + subty.to_hu_conv_name + ";\n}" @@ -197,7 +193,8 @@ class TypeMappingGenerator: if subty.from_hu_conv is not None: hu_conv_b = "" if subty.from_hu_conv[1] != "": - hu_conv_b = "for (" + subty.java_hu_ty + " " + conv_name + ": " + arr_name + ") { " + subty.from_hu_conv[1] + "; }" + iterator = self.consts.for_n_in_arr(conv_name, arr_name, subty) + hu_conv_b = iterator[0] + subty.from_hu_conv[1] + ";" + iterator[1] from_hu_conv = (self.consts.map_hu_array_elems(arr_name, conv_name, ty_info, subty), hu_conv_b) return ConvInfo(ty_info = ty_info, arg_name = ty_info.var_name, @@ -537,9 +534,12 @@ class TypeMappingGenerator: to_hu_conv = self.consts.var_decl_statement(ty_info.java_hu_ty, "ret_hu_conv", "new " + ty_info.java_hu_ty + "(null, " + ty_info.var_name + ")") + ";\n" + self.consts.add_ref("ret_hu_conv", "this") + ";", to_hu_conv_name = "ret_hu_conv", from_hu_conv = (ty_info.var_name + " == null ? 0 : " + self.consts.get_ptr(ty_info.var_name), self.consts.add_ref("this", ty_info.var_name))) + ret_conv = ("uint64_t ret_" + ty_info.var_name + " = (uint64_t)", ";") + if holds_ref: + ret_conv = (ret_conv[0], " | 1;") return ConvInfo(ty_info = ty_info, arg_name = ty_info.var_name, arg_conv = ty_info.rust_obj + "* " + ty_info.var_name + "_conv = (" + ty_info.rust_obj + "*)(" + ty_info.var_name + " & ~1);", arg_conv_name = ty_info.var_name + "_conv", arg_conv_cleanup = None, - ret_conv = ("uint64_t ret_" + ty_info.var_name + " = (uint64_t)", ";"), ret_conv_name = "ret_" + ty_info.var_name, + ret_conv = ret_conv, ret_conv_name = "ret_" + ty_info.var_name, to_hu_conv = "TODO 3", to_hu_conv_name = None, from_hu_conv = None) # its a pointer, no conv needed assert False # We should have handled every case by now.