}
"""
+ self.util_fn_pfx = ""
+ self.util_fn_sfx = ""
+
self.common_base = """
export default class CommonBase {
ptr: number;
_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;
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"""
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;
// 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;
}
// 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;
}
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
"""
return out_opaque_struct_human
- def map_function(self, argument_types, c_call_string, is_free, method_name, return_type_info, struct_meth, default_constructor_args, takes_self, args_known, has_out_java_struct: bool, type_mapping_generator):
+ def map_function(self, argument_types, c_call_string, method_name, return_type_info, struct_meth, default_constructor_args, takes_self, args_known, type_mapping_generator):
out_java = ""
out_c = ""
out_java_struct = None
}}
"""
- if has_out_java_struct:
- out_java_struct = ""
- if not args_known:
- out_java_struct += ("\t// Skipped " + method_name + "\n")
- has_out_java_struct = False
+ out_java_struct = ""
+ if not args_known:
+ out_java_struct += ("\t// Skipped " + method_name + "\n")
+ else:
+ meth_n = method_name[len(struct_meth) + 1:]
+ if not takes_self:
+ out_java_struct += (
+ "\tpublic static " + return_type_info.java_hu_ty + " constructor_" + meth_n + "(")
else:
- meth_n = method_name[len(struct_meth) + 1:]
- if not takes_self:
- out_java_struct += (
- "\tpublic static " + return_type_info.java_hu_ty + " constructor_" + meth_n + "(")
- else:
- out_java_struct += ("\tpublic " + return_type_info.java_hu_ty + " " + meth_n + "(")
- for idx, arg in enumerate(argument_types):
- if idx != 0:
- if not takes_self or idx > 1:
- out_java_struct += (", ")
- elif takes_self:
- continue
- if arg.java_ty != "void":
- if arg.arg_name in default_constructor_args:
- for explode_idx, explode_arg in enumerate(default_constructor_args[arg.arg_name]):
- if explode_idx != 0:
- out_java_struct += (", ")
- out_java_struct += (
- explode_arg.java_hu_ty + " " + arg.arg_name + "_" + explode_arg.arg_name)
- else:
- out_java_struct += (arg.java_hu_ty + " " + arg.arg_name)
+ out_java_struct += ("\tpublic " + return_type_info.java_hu_ty + " " + meth_n + "(")
+ for idx, arg in enumerate(argument_types):
+ if idx != 0:
+ if not takes_self or idx > 1:
+ out_java_struct += (", ")
+ elif takes_self:
+ continue
+ if arg.java_ty != "void":
+ if arg.arg_name in default_constructor_args:
+ for explode_idx, explode_arg in enumerate(default_constructor_args[arg.arg_name]):
+ if explode_idx != 0:
+ out_java_struct += (", ")
+ out_java_struct += (
+ explode_arg.java_hu_ty + " " + arg.arg_name + "_" + explode_arg.arg_name)
+ else:
+ out_java_struct += (arg.java_hu_ty + " " + arg.arg_name)
out_c += (") {\n")
if out_java_struct is not None:
out_c += ("\n\treturn ret_val;")
out_c += ("\n}\n\n")
- if has_out_java_struct:
+ if args_known:
out_java_struct += ("\t\t")
if return_type_info.java_ty != "void":
out_java_struct += (return_type_info.java_ty + " ret = ")
elif info.from_hu_conv is not None and info.from_hu_conv[1] != "":
if not takes_self and return_type_info.to_hu_conv_name is not None:
out_java_struct += (
- "\t\t" + info.from_hu_conv[1].replace("this", return_type_info.to_hu_conv_name) + ";\n")
+ "\t\t" + info.from_hu_conv[1].replace("this", return_type_info.to_hu_conv_name).replace("\n", "\n\t\t") + ";\n")
else:
- out_java_struct += ("\t\t" + info.from_hu_conv[1] + ";\n")
+ out_java_struct += ("\t\t" + info.from_hu_conv[1].replace("\n", "\n\t\t") + ";\n")
if return_type_info.to_hu_conv_name is not None:
out_java_struct += ("\t\treturn " + return_type_info.to_hu_conv_name + ";\n")