projects
/
ldk-java
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Handle `uintptr_t`s better in JNI bindings
[ldk-java]
/
genbindings.py
diff --git
a/genbindings.py
b/genbindings.py
index acc757b19b89cd71792805f3c6b611695fd5db33..ca88a3aa989fe43792e5521cf7e6d2d264902cd6 100755
(executable)
--- a/
genbindings.py
+++ b/
genbindings.py
@@
-14,8
+14,12
@@
else:
sys.exit(1)
target = None
sys.exit(1)
target = None
-if sys.argv[6] == "java":
+if sys.argv[6] == "java" or sys.argv[6] == "android":
+ import java_strings
from java_strings import Consts
from java_strings import Consts
+ target = java_strings.Target.JAVA
+ if sys.argv[6] == "android":
+ target = java_strings.Target.ANDROID
elif sys.argv[6] == "typescript":
import typescript_strings
from typescript_strings import Consts
elif sys.argv[6] == "typescript":
import typescript_strings
from typescript_strings import Consts
@@
-221,7
+225,8
@@
def java_c_types(fn_arg, ret_arr_len):
c_ty = "int64_t"
fn_arg = fn_arg[8:].strip()
else:
c_ty = "int64_t"
fn_arg = fn_arg[8:].strip()
else:
- c_ty = "intptr_t"
+ c_ty = "int64_t"
+ rust_obj = "uintptr_t"
fn_arg = fn_arg[9:].strip()
is_primitive = True
elif is_const and fn_arg.startswith("char *"):
fn_arg = fn_arg[9:].strip()
is_primitive = True
elif is_const and fn_arg.startswith("char *"):
@@
-303,7
+308,6
@@
def java_c_types(fn_arg, ret_arr_len):
c_ty = consts.ptr_c_ty
java_ty = consts.ptr_native_ty
fn_ty_arg = "J"
c_ty = consts.ptr_c_ty
java_ty = consts.ptr_native_ty
fn_ty_arg = "J"
- is_primitive = False
var_is_arr = var_is_arr_regex.match(fn_arg)
if var_is_arr is not None or ret_arr_len is not None:
var_is_arr = var_is_arr_regex.match(fn_arg)
if var_is_arr is not None or ret_arr_len is not None:
@@
-344,7
+348,7
@@
with open(sys.argv[1]) as in_h:
clone_fns.add(reg_fn.group(2))
else:
rty = java_c_types(reg_fn.group(1), None)
clone_fns.add(reg_fn.group(2))
else:
rty = java_c_types(reg_fn.group(1), None)
- if rty is not None and
rty.rust_obj is not Non
e and reg_fn.group(2) == rty.java_hu_ty + "_new":
+ if rty is not None and
not rty.is_native_primitiv
e and reg_fn.group(2) == rty.java_hu_ty + "_new":
constructor_fns[rty.rust_obj] = reg_fn.group(3)
continue
arr_fn = fn_ret_arr_regex.match(line)
constructor_fns[rty.rust_obj] = reg_fn.group(3)
continue
arr_fn = fn_ret_arr_regex.match(line)
@@
-426,8
+430,13
@@
with open(sys.argv[1]) as in_h, open(sys.argv[2], "w") as out_java:
else:
write_c(out_c_delta)
else:
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:
out_java_struct = open(f"{sys.argv[3]}/structs/{struct_meth}{consts.file_ext}", "a")
if ("LDK" + struct_meth in opaque_structs or "LDK" + struct_meth in trait_structs) 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]
+ out_java_struct = open(f"{sys.argv[3]}/structs/UtilMethods{consts.file_ext}", "a")
+ if out_java_struct is not None:
out_java_struct.write(out_java_struct_delta)
def map_unitary_enum(struct_name, field_lines):
out_java_struct.write(out_java_struct_delta)
def map_unitary_enum(struct_name, field_lines):
@@
-592,7
+601,7
@@
with open(sys.argv[1]) as in_h, open(sys.argv[2], "w") as out_java:
if res_map.from_hu_conv is not None:
out_java_struct.write("\t\t\tthis(null, bindings.C" + human_ty + "_ok(" + res_map.from_hu_conv[0] + "));\n")
if res_map.from_hu_conv[1] != "":
if res_map.from_hu_conv is not None:
out_java_struct.write("\t\t\tthis(null, bindings.C" + human_ty + "_ok(" + res_map.from_hu_conv[0] + "));\n")
if res_map.from_hu_conv[1] != "":
- out_java_struct.write("\t\t\t" + res_map.from_hu_conv[1] + ";\n")
+ out_java_struct.write("\t\t\t" + res_map.from_hu_conv[1]
.replace("\n", "\n\t\t\t")
+ ";\n")
else:
out_java_struct.write("\t\t\tthis(null, bindings.C" + human_ty + "_ok(res));\n")
out_java_struct.write("\t\t}\n\t}\n\n")
else:
out_java_struct.write("\t\t\tthis(null, bindings.C" + human_ty + "_ok(res));\n")
out_java_struct.write("\t\t}\n\t}\n\n")
@@
-630,7
+639,7
@@
with open(sys.argv[1]) as in_h, open(sys.argv[2], "w") as out_java:
if err_map.from_hu_conv is not None:
out_java_struct.write("\t\t\tthis(null, bindings.C" + human_ty + "_err(" + err_map.from_hu_conv[0] + "));\n")
if err_map.from_hu_conv[1] != "":
if err_map.from_hu_conv is not None:
out_java_struct.write("\t\t\tthis(null, bindings.C" + human_ty + "_err(" + err_map.from_hu_conv[0] + "));\n")
if err_map.from_hu_conv[1] != "":
- out_java_struct.write("\t\t\t" + err_map.from_hu_conv[1] + ";\n")
+ out_java_struct.write("\t\t\t" + err_map.from_hu_conv[1]
.replace("\n", "\n\t\t\t")
+ ";\n")
else:
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")
else:
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")
@@
-905,3
+914,5
@@
with open(sys.argv[4], "w") as out_c:
out_c.write(consts.c_file_pfx)
out_c.write(consts.init_str())
out_c.write(c_file)
out_c.write(consts.c_file_pfx)
out_c.write(consts.init_str())
out_c.write(c_file)
+with open(f"{sys.argv[3]}/structs/UtilMethods{consts.file_ext}", "a") as util:
+ util.write(consts.util_fn_sfx)