Handle clones upstream instead of creating clone fns
[ldk-java] / typescript_strings.py
index 620d9d1cfb7b752e90518709937a3c7a87bb5947..3ac304149a6bee481b10c6503cf92c00a2dcff81 100644 (file)
@@ -105,7 +105,9 @@ void *memcpy(void *dest, const void *src, size_t n);
 int memcmp(const void *s1, const void *s2, size_t n);
 
 void __attribute__((noreturn)) abort(void);
-void assert(bool expression);
+static inline void assert(bool expression) {
+       if (!expression) { abort(); }
+}
 """
 
         if not DEBUG:
@@ -216,10 +218,6 @@ _Static_assert(offsetof(LDKCVec_u8Z, datalen) == offsetof(LDKu8slice, datalen),
 
 _Static_assert(sizeof(void*) == 4, "Pointers mut be 32 bits");
 
-//typedef struct int64_tArray { uint32_t *len; /* len + 1 is data */ } int64_tArray;
-//typedef struct uint32_tArray { uint32_t *len; /* len + 1 is data */ } uint32_tArray;
-//typedef struct ptrArray { uint32_t *len; /* len + 1 is data */ } ptrArray;
-//typedef struct int8_tArray { uint32_t *len; /* len + 1 is data */ } int8_tArray;
 typedef uint32_t int64_tArray;
 typedef uint32_t int8_tArray;
 typedef uint32_t uint32_tArray;
@@ -241,6 +239,12 @@ jstring str_ref_to_ts(const char* chars, size_t len) {
 
 typedef bool jboolean;
 
+uint32_t __attribute__((visibility("default"))) TS_malloc(uint32_t size) {
+       return (uint32_t)MALLOC(size, "JS-Called malloc");
+}
+void __attribute__((visibility("default"))) TS_free(uint32_t ptr) {
+       FREE((void*)ptr);
+}
 """
 
         self.hu_struct_file_prefix = f"""
@@ -302,7 +306,7 @@ import * as bindings from '../bindings' // TODO: figure out location
         return "str_ref_to_ts(" + var_name + ", " + str_len + ")"
 
     def c_fn_name_define_pfx(self, fn_name, have_args):
-        return "TS_" + fn_name + "("
+        return " __attribute__((visibility(\"default\"))) TS_" + fn_name + "("
 
     def wasm_import_header(self, target):
         if target == Target.NODEJS:
@@ -335,9 +339,18 @@ const nextMultipleOfFour = (value: number) => {
     return Math.ceil(value / 4) * 4;
 }
 
-const encodeArray = (inputArray) => {
-       const cArrayPointer = wasm.wasm_malloc((inputArray.length + 1) * 4);
-       const arrayMemoryView = new Uint32Array(memory.buffer, cArrayPointer + 4, inputArray.length);
+const encodeUint8Array = (inputArray) => {
+       const cArrayPointer = wasm.TS_malloc(inputArray.length + 4);
+       const arrayLengthView = new Uint32Array(memory.buffer, cArrayPointer, 1);
+    arrayLengthView[0] = inputArray.length;
+       const arrayMemoryView = new Uint8Array(memory.buffer, cArrayPointer + 4, inputArray.length);
+       arrayMemoryView.set(inputArray);
+       return cArrayPointer;
+}
+
+const encodeUint32Array = (inputArray) => {
+       const cArrayPointer = wasm.TS_malloc((inputArray.length + 1) * 4);
+       const arrayMemoryView = new Uint32Array(memory.buffer, cArrayPointer, inputArray.length);
        arrayMemoryView.set(inputArray, 1);
     arrayMemoryView[0] = inputArray.length;
        return cArrayPointer;
@@ -362,7 +375,7 @@ const decodeUint8Array = (arrayPointer, free = true) => {
        // will free the underlying memory when it becomes unreachable instead of copying here.
        const actualArray = actualArrayViewer.slice(0, arraySize);
        if (free) {
-               wasm.free(arrayPointer);
+               wasm.TS_free(arrayPointer);
        }
        return actualArray;
 }
@@ -377,7 +390,7 @@ const decodeUint32Array = (arrayPointer, free = true) => {
        // will free the underlying memory when it becomes unreachable instead of copying here.
        const actualArray = actualArrayViewer.slice(0, arraySize);
        if (free) {
-               wasm.free(arrayPointer);
+               wasm.TS_free(arrayPointer);
        }
        return actualArray;
 }
@@ -385,7 +398,7 @@ const decodeUint32Array = (arrayPointer, free = true) => {
 const encodeString = (string) => {
     // make malloc count divisible by 4
     const memoryNeed = nextMultipleOfFour(string.length + 1);
-    const stringPointer = wasm.wasm_malloc(memoryNeed);
+    const stringPointer = wasm.TS_malloc(memoryNeed);
     const stringMemoryView = new Uint8Array(
         memory.buffer, // value
         stringPointer, // offset
@@ -682,7 +695,7 @@ const decodeString = (stringPointer, free = true) => {
                 elif not fn_line.ret_ty_info.passed_as_ptr:
                     out_c = out_c + "\treturn js_invoke_function_" + str(len(fn_line.args_ty)) + "(j_calls->" + fn_line.fn_name + "_meth"
                 else:
-                    out_c = out_c + "\t" + fn_line.ret_ty_info.rust_obj + "* ret; // TODO: Call " + fn_line.fn_name + " on j_calls with instance obj, returning a pointer"
+                    out_c = out_c + "\t" + fn_line.ret_ty_info.rust_obj + "* ret = (" + fn_line.ret_ty_info.rust_obj + "*)js_invoke_function_" + str(len(fn_line.args_ty)) + "(j_calls->" + fn_line.fn_name + "_meth"
 
                 for idx, arg_info in enumerate(fn_line.args_ty):
                     if arg_info.ret_conv is not None:
@@ -751,7 +764,7 @@ const decodeString = (stringPointer, free = true) => {
         out_c = out_c + "\treturn ret;\n"
         out_c = out_c + "}\n"
 
-        out_c = out_c + self.c_fn_ty_pfx + "long TS_" + struct_name + "_new (/*TODO: JS Object Reference */void* o"
+        out_c = out_c + self.c_fn_ty_pfx + "long " + self.c_fn_name_define_pfx(struct_name + "_new", True) + "/*TODO: JS Object Reference */void* o"
         for var in field_var_conversions:
             if isinstance(var, ConvInfo):
                 out_c = out_c + ", " + var.c_ty + " " + var.arg_name
@@ -829,7 +842,7 @@ const decodeString = (stringPointer, free = true) => {
         out_java += ("\tstatic { " + struct_name + ".init(); }\n")
         out_java += ("\tpublic static native " + struct_name + " " + struct_name + "_ref_from_ptr(long ptr);\n");
 
-        out_c += (self.c_fn_ty_pfx + self.c_complex_enum_pass_ty(struct_name) + " TS_" + struct_name + "_ref_from_ptr (" + self.ptr_c_ty + " ptr) {\n")
+        out_c += (self.c_fn_ty_pfx + self.c_complex_enum_pass_ty(struct_name) + self.c_fn_name_define_pfx(struct_name + "_ref_from_ptr", True) + self.ptr_c_ty + " ptr) {\n")
         out_c += ("\t" + struct_name + " *obj = (" + struct_name + "*)ptr;\n")
         out_c += ("\tswitch(obj->tag) {\n")
         for var in variant_list:
@@ -893,7 +906,7 @@ const decodeString = (stringPointer, free = true) => {
         if return_type_info.ret_conv is not None:
             ret_conv_pfx, ret_conv_sfx = return_type_info.ret_conv
         out_java += (" " + method_name + "(")
-        out_c += (" TS_"  + method_name + "(")
+        out_c += (" "  + self.c_fn_name_define_pfx(method_name, True))
 
         method_argument_string = ""
         native_call_argument_string = ""