Map enum functions into human structs and Result types sanely
authorMatt Corallo <git@bluematt.me>
Mon, 29 Mar 2021 21:11:44 +0000 (17:11 -0400)
committerMatt Corallo <git@bluematt.me>
Tue, 30 Mar 2021 01:55:55 +0000 (21:55 -0400)
genbindings.py
java_strings.py

index 854717462a4bf478bf05fefbe47f1aebeab6d789..2d6771c30d792786873456ff9fd98884d284ec84 100755 (executable)
@@ -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)
index 1633756431634f47efaa60fb3e86aade84003691..14c6a9f61fb8c6387f1f688a9ea79faf75b12b72 100644 (file)
@@ -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: