}
const fn_list = ["uuuuuu", "buuuuu", "bbuuuu", "bbbuuu", "bbbbuu", "bbbbbu",
- "bbbbbb", "ubuubu", "ubuuuu", "ubbuuu", "uubuuu", "uububu", "ububuu"];
+ "bbbbbb", "ubuubu", "ubuuuu", "ubbuuu", "uubuuu", "uubbuu", "uububu", "ububuu"];
/* @internal */
export async function initializeWasmFromUint8Array(wasmBinary: Uint8Array) {
}"""
self.obj_defined(["BigEndianScalar"], "structs")
+ self.witness_program_defn = """export class WitnessProgram extends CommonBase {
+ /** The witness program bytes themselves */
+ public program: Uint8Array;
+ /** The witness program version */
+ public version: WitnessVersion;
+
+ /* @internal */
+ public constructor(_dummy: null, ptr: bigint) {
+ super(ptr, bindings.WitnessProgram_free);
+ this.program = bindings.decodeUint8Array(bindings.WitnessProgram_get_program(ptr));
+ this.version = new WitnessVersion(bindings.WitnessProgram_get_version(ptr));
+ }
+ public static constructor_new(program: Uint8Array, version: WitnessVersion): WitnessProgram {
+ if (program.length < 2 || program.length > 40)
+ throw new Error("WitnessProgram must be between 2 and 40 bytes long");
+ if (version.getVal() == 0 && program.length != 20 && program.length != 32)
+ throw new Error("WitnessProgram for version 0 must be between either 20 or 30 bytes");
+ return new WitnessProgram(null, bindings.WitnessProgram_new(version.getVal(), bindings.encodeUint8Array(program)));
+ }
+}"""
+ self.obj_defined(["WitnessProgram"], "structs")
+
self.c_file_pfx = """#include "js-wasm.h"
#include <stdatomic.h>
#include <lightning.h>
self.usize_c_ty = "uint32_t"
self.usize_native_ty = "number"
self.native_zero_ptr = "0n"
- self.result_c_ty = "uint32_t"
+ self.unitary_enum_c_ty = "uint32_t"
self.ptr_arr = "ptrArray"
self.is_arr_some_check = ("", " != 0")
self.get_native_arr_len_call = ("", "->arr_len")
else:
return "FREE(" + arr_name + ")"
- def map_hu_array_elems(self, arr_name, conv_name, arr_ty, elem_ty):
+ def map_hu_array_elems(self, arr_name, conv_name, arr_ty, elem_ty, is_nullable):
if elem_ty.rust_obj == "LDKU5":
return arr_name + " != null ? bindings.uint5ArrToBytes(" + arr_name + ") : null"
assert elem_ty.c_ty == "uint64_t" or elem_ty.c_ty.endswith("Array") or elem_ty.rust_obj == "LDKStr"
- return arr_name + " != null ? " + arr_name + ".map(" + conv_name + " => " + elem_ty.from_hu_conv[0] + ") : null"
+ if is_nullable:
+ return arr_name + " != null ? " + arr_name + ".map(" + conv_name + " => " + elem_ty.from_hu_conv[0] + ") : null"
+ else:
+ return arr_name + ".map(" + conv_name + " => " + elem_ty.from_hu_conv[0] + ")"
def str_ref_to_native_call(self, var_name, str_len):
return "str_ref_to_ts(" + var_name + ", " + str_len + ")"
return ("bindings.encodeUint8Array(" + inner + ")", "")
elif mapped_ty.c_ty == "uint16_t" or mapped_ty.c_ty == "int16_t":
return ("bindings.encodeUint16Array(" + inner + ")", "")
- elif mapped_ty.c_ty == "uint32_t":
+ elif mapped_ty.c_ty == "uint32_t" or mapped_ty.rust_obj == "LDKStr":
return ("bindings.encodeUint32Array(" + inner + ")", "")
elif mapped_ty.c_ty == "int64_t" or mapped_ty.c_ty == "uint64_t":
return ("bindings.encodeUint64Array(" + inner + ")", "")
- elif mapped_ty.rust_obj == "LDKStr":
- return ("XXX-unused", "")
else:
print(mapped_ty.c_ty)
assert False
for var in flattened_field_var_conversions:
if isinstance(var, ConvInfo):
impl_constructor_arguments += f", {var.arg_name}: {var.java_hu_ty}"
- super_instantiator += first_to_lower(var.arg_name) + ", "
if var.from_hu_conv is not None:
bindings_instantiator += ", " + var.from_hu_conv[0]
if var.from_hu_conv[1] != "":
bindings_instantiator += ", " + first_to_lower(var.arg_name)
else:
bindings_instantiator += ", " + first_to_lower(var[1]) + ".instance_idx!"
- super_instantiator += first_to_lower(var[1]) + "_impl, "
pointer_to_adder += "\t\timpl_holder.held.ptrs_to.push(" + first_to_lower(var[1]) + ");\n"
impl_constructor_arguments += f", {first_to_lower(var[1])}_impl: {var[0].replace('LDK', '')}Interface"
if isinstance(var, ConvInfo):
trait_constructor_arguments += ", " + var.arg_name
else:
- super_constructor_statements += "\t\tconst " + first_to_lower(var[1]) + " = " + var[1] + ".new_impl(" + super_instantiator + ");\n"
+ super_constructor_statements += "\t\tconst " + first_to_lower(var[1]) + " = " + var[1] + ".new_impl(" + first_to_lower(var[1]) + "_impl"
+ super_instantiator = ""
+ for suparg in var[2]:
+ if isinstance(suparg, ConvInfo):
+ super_instantiator += ", " + suparg.arg_name
+ else:
+ super_instantiator += ", " + first_to_lower(suparg[1]) + "_impl"
+ super_constructor_statements += super_instantiator + ");\n"
trait_constructor_arguments += ", " + first_to_lower(var[1]) + ".instance_idx!"
for suparg in var[2]:
if isinstance(suparg, ConvInfo):
out_c += "\t" + struct_name + " *obj = (" + struct_name + "*)untag_ptr(ptr);\n"
out_c += f"\tassert(obj->tag == {struct_name}_{var.var_name});\n"
if field_map.ret_conv is not None:
- out_c += ("\t\t\t" + field_map.ret_conv[0].replace("\n", "\n\t\t\t"))
+ out_c += ("\t" + field_map.ret_conv[0].replace("\n", "\n\t"))
if var.tuple_variant:
out_c += "obj->" + camel_to_snake(var.var_name)
else: