Fix optimized build
[ldk-java] / genbindings.py
index 22bca7cb4fd11262731c339436ea11c7e3d4ae00..baaf0fcdbed402ea27ef0110c1b17cd5da425e8f 100755 (executable)
@@ -1305,9 +1305,9 @@ with open(sys.argv[1]) as in_h, open(sys.argv[2], "w") as out_java, open(sys.arg
 #include <stdatomic.h>
 """)
 
-    if sys.argv[4] == "false":
+    if sys.argv[5] == "false":
         out_c.write("#define MALLOC(a, _) malloc(a)\n")
-        out_c.write("#define FREE(p) if ((p) > 1024) { free(p); }\n")
+        out_c.write("#define FREE(p) if ((long)(p) > 1024) { free(p); }\n")
         out_c.write("#define DO_ASSERT(a) (void)(a)\n")
         out_c.write("#define CHECK(a)\n")
     else:
@@ -1447,6 +1447,7 @@ public class bindings {
        public static native long bytes_to_u8_vec(byte[] bytes);
        public static native long new_txpointer_copy_data(byte[] txdata);
        public static native void txpointer_free(long ptr);
+       public static native byte[] txpointer_get_buffer(long ptr);
        public static native long vec_slice_len(long vec);
        public static native long new_empty_slice_vec();
 
@@ -1491,6 +1492,13 @@ JNIEXPORT long JNICALL Java_org_ldk_impl_bindings_bytes_1to_1u8_1vec (JNIEnv * _
        (*_env)->GetByteArrayRegion (_env, bytes, 0, vec->datalen, vec->data);
        return (long)vec;
 }
+JNIEXPORT jbyteArray JNICALL Java_org_ldk_impl_bindings_txpointer_1get_1buffer (JNIEnv * env, jclass _b, jlong ptr) {
+       LDKTransaction *txdata = (LDKTransaction*)ptr;
+       LDKu8slice slice;
+       slice.data = txdata->data;
+       slice.datalen = txdata->datalen;
+       return Java_org_ldk_impl_bindings_get_1u8_1slice_1bytes(env, _b, (long)&slice);
+}
 JNIEXPORT long JNICALL Java_org_ldk_impl_bindings_new_1txpointer_1copy_1data (JNIEnv * env, jclass _b, jbyteArray bytes) {
        LDKTransaction *txdata = (LDKTransaction*)MALLOC(sizeof(LDKTransaction), "LDKTransaction");
        txdata->datalen = (*env)->GetArrayLength(env, bytes);
@@ -1763,6 +1771,7 @@ class CommonBase {
                         out_java_struct.write("\tTransaction(java.lang.Object _dummy, long ptr) { super(ptr); }\n")
                         out_java_struct.write("\tpublic Transaction(byte[] data) { super(bindings.new_txpointer_copy_data(data)); }\n")
                         out_java_struct.write("\t@Override public void finalize() throws Throwable { super.finalize(); bindings.txpointer_free(ptr); }\n")
+                        out_java_struct.write("\tpublic byte[] get_contents() { return bindings.txpointer_get_buffer(ptr); }\n")
                         # TODO: Transaction body
                         out_java_struct.write("}")
                 else:
@@ -1794,7 +1803,15 @@ class CommonBase {
                     for idx, ty_info in enumerate(tuple_types[alias_match.group(1)][0]):
                         e = chr(ord('a') + idx)
                         out_java.write("\tpublic static native " + ty_info.java_ty + " " + alias_match.group(2) + "_get_" + e + "(long ptr);\n")
-                        # XXX: Write C method!
+                        out_c.write("JNIEXPORT " + ty_info.c_ty + " JNICALL Java_org_ldk_impl_bindings_" + alias_match.group(2).replace("_", "_1") + "_1get_1" + e + "(JNIEnv *_env, jclass _b, jlong ptr) {\n")
+                        out_c.write("\t" + alias_match.group(1) + " *tuple = (" + alias_match.group(1) + "*)ptr;\n")
+                        conv_info = map_type_with_info(ty_info, False, None, False, True)
+                        if conv_info.ret_conv is not None:
+                            out_c.write("\t" + conv_info.ret_conv[0].replace("\n", "\n\t") + "tuple->" + e + conv_info.ret_conv[1].replace("\n", "\n\t") + "\n")
+                            out_c.write("\treturn " + conv_info.ret_conv_name + ";\n")
+                        else:
+                            out_c.write("\treturn tuple->" + e + ";\n")
+                        out_c.write("}\n")
                 elif alias_match.group(1) in result_templ_structs:
                     result_types.add(alias_match.group(2))
                     human_ty = alias_match.group(2).replace("LDKCResult", "Result")