class Target(Enum):
JAVA = 1,
ANDROID = 2
+ MACOS = 3
class Consts:
def __init__(self, DEBUG: bool, target: Target, **kwargs):
uint16_t = ['short'],
uint32_t = ['int'],
uint64_t = ['long'],
+ int64_t = ['long'],
)
self.java_type_map = dict(
String = "String"
}
}"""
+ 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;
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)
}
"""
- 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
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"