X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=java_strings.py;h=d12237fe8a4bbbc4ca75dfdab45ce3bad610a5e2;hb=5e70b6bf6a87efc9fb0dc006612c3a8165a0e521;hp=a15991259093dca37b18c24ff2af5cc54581df7a;hpb=46763b974f120d1795fca6c1e757578784f3305a;p=ldk-java diff --git a/java_strings.py b/java_strings.py index a1599125..d12237fe 100644 --- a/java_strings.py +++ b/java_strings.py @@ -5,6 +5,7 @@ import sys class Target(Enum): JAVA = 1, ANDROID = 2 + MACOS = 3 class Consts: def __init__(self, DEBUG: bool, target: Target, **kwargs): @@ -16,6 +17,7 @@ class Consts: uint16_t = ['short'], uint32_t = ['int'], uint64_t = ['long'], + int64_t = ['long'], ) self.java_type_map = dict( String = "String" @@ -129,6 +131,38 @@ class CommonBase { } }""" + self.txin_defn = """public class TxIn extends CommonBase { + /** The witness in this input, in serialized form */ + public final byte[] witness; + /** The script_sig in this input */ + public final byte[] script_sig; + /** The transaction output's sequence number */ + public final int sequence; + /** The txid this input is spending */ + public final byte[] previous_txid; + /** The output index within the spent transaction of the output this input is spending */ + public final int previous_vout; + + TxIn(java.lang.Object _dummy, long ptr) { + super(ptr); + this.witness = bindings.TxIn_get_witness(ptr); + this.script_sig = bindings.TxIn_get_script_sig(ptr); + this.sequence = bindings.TxIn_get_sequence(ptr); + this.previous_txid = bindings.TxIn_get_previous_txid(ptr); + this.previous_vout = bindings.TxIn_get_previous_vout(ptr); + } + /** Constructs a new TxIn, note that previous_txid must be exactly 32 bytes */ + public TxIn(byte[] witness, byte[] script_sig, int sequence, byte[] previous_txid, int previous_vout) { + this(null, bindings.TxIn_new(witness, script_sig, sequence, previous_txid, previous_vout)); + } + + @Override @SuppressWarnings(\"deprecation\") + protected void finalize() throws Throwable { + super.finalize(); + if (ptr != 0) { bindings.TxIn_free(ptr); } + } +}""" + self.scalar_defn = """public class BigEndianScalar extends CommonBase { /** The bytes of the scalar value, in big endian */ public final byte[] scalar_bytes; @@ -193,7 +227,7 @@ void __attribute__((constructor)) spawn_stderr_redirection() { else: self.c_file_pfx = self.c_file_pfx + "#define DEBUG_PRINT(...) fprintf(stderr, __VA_ARGS__)\n" - if not DEBUG or sys.platform == "darwin": + if not DEBUG or self.target == Target.MACOS: self.c_file_pfx = self.c_file_pfx + """#define MALLOC(a, _) malloc(a) #define FREE(p) if ((uint64_t)(p) > 4096) { free(p); } #define CHECK_ACCESS(p) @@ -218,7 +252,7 @@ void __attribute__((constructor)) debug_log_version() { } """ - if sys.platform != "darwin": + if self.target != Target.MACOS: self.c_file_pfx += """ // Running a leak check across all the allocations and frees of the JDK is a mess, // so instead we implement our own naive leak checker here, relying on the -wrap @@ -600,7 +634,7 @@ import javax.annotation.Nullable; res = res + "\t" + ty + "_clz = (*env)->FindClass(env, \"" + ty.replace("arr_of_", "[") + "\");\n" res = res + "\tCHECK(" + ty + "_clz != NULL);\n" res = res + "\t" + ty + "_clz = (*env)->NewGlobalRef(env, " + ty + "_clz);\n" - res = res + "\tString_clz = (*env)->FindClass(env, \"Ljava/lang/String;\");\n" + res = res + "\tString_clz = (*env)->FindClass(env, \"java/lang/String\");\n" res = res + "\tCHECK(String_clz != NULL);\n" res = res + "\tString_clz = (*env)->NewGlobalRef(env, String_clz);\n"