X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=genbindings.py;h=96fafb70b39e32f66a4ead0dc2bcc7bbfa9ad8ef;hb=25b52e9c5f741b49bc708de89faf84a55e003a69;hp=21ca0aee13078696f196340f8e9baea6eeadabc2;hpb=25679cbd668dff86345d5e1e8eeda6fbb7e5abfc;p=ldk-java diff --git a/genbindings.py b/genbindings.py index 21ca0aee..96fafb70 100755 --- a/genbindings.py +++ b/genbindings.py @@ -544,12 +544,12 @@ with open(sys.argv[1]) as in_h, open(sys.argv[2], "w") as out_java: can_clone = False out_java.write("\tpublic static native boolean " + struct_name + "_result_ok(long arg);\n") - write_c(consts.c_fn_ty_pfx + "jboolean " + consts.c_fn_name_pfx + struct_name.replace("_", "_1") + "_1result_1ok (" + consts.c_fn_args_pfx + ", " + consts.ptr_c_ty + " arg) {\n") + write_c(consts.c_fn_ty_pfx + "jboolean " + consts.c_fn_name_define_pfx(struct_name + "_result_ok", True) + consts.ptr_c_ty + " arg) {\n") write_c("\treturn ((" + struct_name + "*)arg)->result_ok;\n") write_c("}\n") out_java.write("\tpublic static native " + res_map.java_ty + " " + struct_name + "_get_ok(long arg);\n") - write_c(consts.c_fn_ty_pfx + res_map.c_ty + " " + consts.c_fn_name_pfx + struct_name.replace("_", "_1") + "_1get_1ok (" + consts.c_fn_args_pfx + ", " + consts.ptr_c_ty + " arg) {\n") + write_c(consts.c_fn_ty_pfx + res_map.c_ty + " " + consts.c_fn_name_define_pfx(struct_name + "_get_ok", True) + consts.ptr_c_ty + " arg) {\n") write_c("\t" + struct_name + " *val = (" + struct_name + "*)arg;\n") write_c("\tCHECK(val->result_ok);\n\t") out_java_struct.write("\tpublic static final class " + human_ty + "_OK extends " + human_ty + " {\n") @@ -586,7 +586,7 @@ with open(sys.argv[1]) as in_h, open(sys.argv[2], "w") as out_java: out_java_struct.write("\t\t}\n\t}\n\n") out_java.write("\tpublic static native " + err_map.java_ty + " " + struct_name + "_get_err(long arg);\n") - write_c(consts.c_fn_ty_pfx + err_map.c_ty + " " + consts.c_fn_name_pfx + struct_name.replace("_", "_1") + "_1get_1err (" + consts.c_fn_args_pfx + ", " + consts.ptr_c_ty + " arg) {\n") + write_c(consts.c_fn_ty_pfx + err_map.c_ty + " " + consts.c_fn_name_define_pfx(struct_name + "_get_err", True) + consts.ptr_c_ty + " arg) {\n") write_c("\t" + struct_name + " *val = (" + struct_name + "*)arg;\n") write_c("\tCHECK(!val->result_ok);\n\t") out_java_struct.write("\tpublic static final class " + human_ty + "_Err extends " + human_ty + " {\n") @@ -623,54 +623,24 @@ with open(sys.argv[1]) as in_h, open(sys.argv[2], "w") as out_java: out_java_struct.write("\t\t\tthis(null, bindings.C" + human_ty + "_err(err));\n") out_java_struct.write("\t\t}\n\t}\n}\n") - if can_clone: - clone_fns.add(struct_name.replace("LDK", "") + "_clone") - write_c("static inline " + struct_name + " " + struct_name.replace("LDK", "") + "_clone(const " + struct_name + " *orig) {\n") - write_c("\t" + struct_name + " res = { .result_ok = orig->result_ok };\n") - write_c("\tif (orig->result_ok) {\n") - if res_map.c_ty == "void": - write_c("\t\tres.contents.result = NULL;\n") - else: - if res_map.is_native_primitive: - write_c("\t\t" + res_map.c_ty + "* contents = MALLOC(sizeof(" + res_map.c_ty + "), \"" + res_map.c_ty + " result OK clone\");\n") - write_c("\t\t*contents = *orig->contents.result;\n") - else: - write_c("\t\t" + res_map.rust_obj + "* contents = MALLOC(sizeof(" + res_map.rust_obj + "), \"" + res_map.rust_obj + " result OK clone\");\n") - write_c("\t\t*contents = " + res_map.rust_obj.replace("LDK", "") + "_clone(orig->contents.result);\n") - write_c("\t\tres.contents.result = contents;\n") - write_c("\t} else {\n") - if err_map.c_ty == "void": - write_c("\t\tres.contents.err = NULL;\n") - else: - if err_map.is_native_primitive: - write_c("\t\t" + err_map.c_ty + "* contents = MALLOC(sizeof(" + err_map.c_ty + "), \"" + err_map.c_ty + " result Err clone\");\n") - write_c("\t\t*contents = *orig->contents.err;\n") - else: - write_c("\t\t" + err_map.rust_obj + "* contents = MALLOC(sizeof(" + err_map.rust_obj + "), \"" + err_map.rust_obj + " result Err clone\");\n") - write_c("\t\t*contents = " + err_map.rust_obj.replace("LDK", "") + "_clone(orig->contents.err);\n") - write_c("\t\tres.contents.err = contents;\n") - write_c("\t}\n\treturn res;\n}\n") - def map_tuple(struct_name, field_lines): out_java.write("\tpublic static native long " + struct_name + "_new(") - write_c(consts.c_fn_ty_pfx + consts.ptr_c_ty + " " + consts.c_fn_name_pfx + struct_name.replace("_", "_1") + "_1new(" + consts.c_fn_args_pfx) + write_c(consts.c_fn_ty_pfx + consts.ptr_c_ty + " " + consts.c_fn_name_define_pfx(struct_name + "_new", len(field_lines) > 3)) ty_list = [] for idx, line in enumerate(field_lines): if idx != 0 and idx < len(field_lines) - 2: ty_info = java_c_types(line.strip(';'), None) if idx != 1: out_java.write(", ") + write_c(", ") e = chr(ord('a') + idx - 1) out_java.write(ty_info.java_ty + " " + e) - write_c(", " + ty_info.c_ty + " " + e) + write_c(ty_info.c_ty + " " + e) ty_list.append(ty_info) tuple_types[struct_name] = (ty_list, struct_name) out_java.write(");\n") write_c(") {\n") write_c("\t" + struct_name + "* ret = MALLOC(sizeof(" + struct_name + "), \"" + struct_name + "\");\n") - can_clone = True - clone_str = "static inline " + struct_name + " " + struct_name.replace("LDK", "") + "_clone(const " + struct_name + " *orig) {\n" - clone_str = clone_str + "\t" + struct_name + " ret = {\n" for idx, line in enumerate(field_lines): if idx != 0 and idx < len(field_lines) - 2: ty_info = type_mapping_generator.map_type(line.strip(';'), False, None, False, False) @@ -682,24 +652,13 @@ with open(sys.argv[1]) as in_h, open(sys.argv[2], "w") as out_java: write_c("\tret->" + e + " = " + e + ";\n") if ty_info.arg_conv_cleanup is not None: write_c("\t//TODO: Really need to call " + ty_info.arg_conv_cleanup + " here\n") - if not ty_info.is_native_primitive and (ty_info.rust_obj.replace("LDK", "") + "_clone") not in clone_fns: - can_clone = False - elif can_clone and ty_info.is_native_primitive: - clone_str = clone_str + "\t\t." + chr(ord('a') + idx - 1) + " = orig->" + chr(ord('a') + idx - 1) + ",\n" - elif can_clone: - clone_str = clone_str + "\t\t." + chr(ord('a') + idx - 1) + " = " + ty_info.rust_obj.replace("LDK", "") + "_clone(&orig->" + chr(ord('a') + idx - 1) + "),\n" write_c("\treturn (long)ret;\n") write_c("}\n") - if can_clone: - clone_fns.add(struct_name.replace("LDK", "") + "_clone") - write_c(clone_str) - write_c("\t};\n\treturn ret;\n}\n") - for idx, ty_info in enumerate(ty_list): e = chr(ord('a') + idx) out_java.write("\tpublic static native " + ty_info.java_ty + " " + struct_name + "_get_" + e + "(long ptr);\n") - write_c(consts.c_fn_ty_pfx + ty_info.c_ty + " " + consts.c_fn_name_pfx + struct_name.replace("_", "_1") + "_1get_1" + e + "(" + consts.c_fn_args_pfx + ", " + consts.ptr_c_ty + " ptr) {\n") + write_c(consts.c_fn_ty_pfx + ty_info.c_ty + " " + consts.c_fn_name_define_pfx(struct_name + "_get_" + e, True) + consts.ptr_c_ty + " ptr) {\n") write_c("\t" + struct_name + " *tuple = (" + struct_name + "*)ptr;\n") conv_info = type_mapping_generator.map_type_with_info(ty_info, False, None, False, True) if conv_info.ret_conv is not None: @@ -823,7 +782,7 @@ with open(sys.argv[1]) as in_h, open(sys.argv[2], "w") as out_java: ty_info = type_mapping_generator.map_type(vec_ty + " arr_elem", False, None, False, False) if len(ty_info.java_fn_ty_arg) == 1: # ie we're a primitive of some form out_java.write("\tpublic static native long " + struct_name + "_new(" + ty_info.java_ty + "[] elems);\n") - write_c(consts.c_fn_ty_pfx + consts.ptr_c_ty + " " + consts.c_fn_name_pfx + struct_name.replace("_", "_1") + "_1new(" + consts.c_fn_args_pfx + ", " + ty_info.c_ty + "Array elems) {\n") + write_c(consts.c_fn_ty_pfx + consts.ptr_c_ty + " " + consts.c_fn_name_define_pfx(struct_name + "_new", True) + ty_info.c_ty + "Array elems) {\n") write_c("\t" + struct_name + " *ret = MALLOC(sizeof(" + struct_name + "), \"" + struct_name + "\");\n") write_c("\tret->datalen = " + consts.get_native_arr_len_call[0] + "elems" + consts.get_native_arr_len_call[1] + ";\n") write_c("\tif (ret->datalen == 0) {\n")