From: Matt Corallo Date: Mon, 29 Mar 2021 21:11:44 +0000 (-0400) Subject: Map enum functions into human structs and Result types sanely X-Git-Tag: v0.0.98~5^2~5 X-Git-Url: http://git.bitcoin.ninja/index.cgi?p=ldk-java;a=commitdiff_plain;h=7dd1685ed3de4a8464e84fa277adabab513d9f13 Map enum functions into human structs and Result types sanely --- diff --git a/genbindings.py b/genbindings.py index 85471746..2d6771c3 100755 --- a/genbindings.py +++ b/genbindings.py @@ -299,7 +299,7 @@ def java_c_types(fn_arg, ret_arr_len): else: c_ty = consts.ptr_c_ty java_ty = consts.ptr_native_ty - java_hu_ty = ma.group(1).strip().replace("LDKCResult", "Result").replace("LDK", "") + java_hu_ty = ma.group(1).strip().replace("LDKCOption", "Option").replace("LDKCResult", "Result").replace("LDK", "") fn_ty_arg = "J" fn_arg = ma.group(2).strip() rust_obj = ma.group(1).strip() @@ -381,7 +381,10 @@ with open(sys.argv[1]) as in_h, open(sys.argv[2], "w") as out_java: method_arguments = method_comma_separated_arguments.split(',') is_free = method_name.endswith("_free") - struct_meth = method_name.split("_")[0] + if method_name.startswith("COption"): + struct_meth = method_name.rsplit("Z", 1)[0][1:] + "Z" + else: + struct_meth = method_name.split("_")[0] return_type_info = type_mapping_generator.map_type(method_return_type, True, ret_arr_len, False, False) @@ -437,7 +440,8 @@ with open(sys.argv[1]) as in_h, open(sys.argv[2], "w") as out_java: write_c(out_c_delta) out_java_struct = None - if ("LDK" + struct_meth in opaque_structs or "LDK" + struct_meth in trait_structs) and not is_free: + if ("LDK" + struct_meth in opaque_structs or "LDK" + struct_meth in trait_structs + or "LDK" + struct_meth in complex_enums or "LDKC" + struct_meth in complex_enums) and not is_free: out_java_struct = open(f"{sys.argv[3]}/structs/{struct_meth}{consts.file_ext}", "a") elif method_name.startswith("C2Tuple_") and method_name.endswith("_read"): struct_meth = method_name.rsplit("_", 1)[0] @@ -463,7 +467,7 @@ with open(sys.argv[1]) as in_h, open(sys.argv[2], "w") as out_java: out_java.write(native_out) def map_complex_enum(struct_name, union_enum_items, enum_doc_comment): - java_hu_type = struct_name.replace("LDK", "") + java_hu_type = struct_name.replace("LDK", "").replace("COption", "Option") complex_enums.add(struct_name) enum_variants = [] @@ -927,6 +931,9 @@ with open(sys.argv[1]) as in_h, open(sys.argv[2], "w") as out_java: for struct_name in trait_structs: with open(f"{sys.argv[3]}/structs/{struct_name.replace('LDK', '')}{consts.file_ext}", "a") as out_java_struct: out_java_struct.write("}\n") + for struct_name in complex_enums: + with open(f"{sys.argv[3]}/structs/{struct_name.replace('LDK', '').replace('COption', 'Option')}{consts.file_ext}", "a") as out_java_struct: + out_java_struct.write("}\n") with open(sys.argv[4], "w") as out_c: out_c.write(consts.c_file_pfx) diff --git a/java_strings.py b/java_strings.py index 16337564..14c6a9f6 100644 --- a/java_strings.py +++ b/java_strings.py @@ -763,7 +763,7 @@ import java.util.Arrays; return base_conv def map_complex_enum(self, struct_name, variant_list, camel_to_snake, enum_doc_comment): - java_hu_type = struct_name.replace("LDK", "") + java_hu_type = struct_name.replace("LDK", "").replace("COption", "Option") out_java_enum = "" out_java = "" out_c = "" @@ -776,7 +776,7 @@ import java.util.Arrays; out_java_enum += ("\t@Override @SuppressWarnings(\"deprecation\")\n") out_java_enum += ("\tprotected void finalize() throws Throwable {\n") out_java_enum += ("\t\tsuper.finalize();\n") - out_java_enum += ("\t\tif (ptr != 0) { bindings." + java_hu_type + "_free(ptr); }\n") + out_java_enum += ("\t\tif (ptr != 0) { bindings." + struct_name.replace("LDK", "") + "_free(ptr); }\n") out_java_enum += ("\t}\n") out_java_enum += ("\tstatic " + java_hu_type + " constr_from_ptr(long ptr) {\n") out_java_enum += ("\t\tbindings." + struct_name + " raw_val = bindings." + struct_name + "_ref_from_ptr(ptr);\n") @@ -845,7 +845,6 @@ import java.util.Arrays; out_c += ("\t\t}\n") out_c += ("\t\tdefault: abort();\n") out_c += ("\t}\n}\n") - out_java_enum += ("}\n") return (out_java, out_java_enum, out_c) def map_opaque_struct(self, struct_name, struct_doc_comment): @@ -896,7 +895,7 @@ import java.util.Arrays; if not args_known: out_java_struct += ("\t// Skipped " + method_name + "\n") else: - meth_n = method_name[len(struct_meth) + 1:] + meth_n = method_name[len(struct_meth) + 1:].strip("_") if doc_comment is not None: out_java_struct += "\t/**\n\t * " + doc_comment.replace("\n", "\n\t * ") + "\n\t */\n" if not takes_self: