X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=java_strings.py;h=327a1f3e60903550f59a7166bafcd58a2a47d169;hb=c284885e498d8783eff4c224410f16d9be63ad91;hp=15c3ac4783ad222aef4647d40fcf1ebb6bec7204;hpb=99d1a3bd6dc5c7ed1499b30bfc2b4c66ffaf858a;p=ldk-java diff --git a/java_strings.py b/java_strings.py index 15c3ac47..327a1f3e 100644 --- a/java_strings.py +++ b/java_strings.py @@ -103,9 +103,10 @@ public class version { self.util_fn_pfx = """package org.ldk.structs; import org.ldk.impl.bindings; +import org.ldk.enums.*; +import org.ldk.util.*; import java.util.Arrays; import javax.annotation.Nullable; -import org.ldk.enums.*; public class UtilMethods { """ @@ -163,6 +164,7 @@ void __attribute__((constructor)) spawn_stderr_redirection() { 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) +#define CHECK_INNER_FIELD_ACCESS_OR_NULL(v) """ if not DEBUG: self.c_file_pfx += """#define DO_ASSERT(a) (void)(a) @@ -319,7 +321,7 @@ void __wrap_free(void* ptr) { __real_free(ptr); } -static void CHECK_ACCESS(void* ptr) { +static void CHECK_ACCESS(const void* ptr) { DO_ASSERT(!pthread_mutex_lock(&allocation_mtx)); allocation* it = allocation_ll; while (it->ptr != ptr) { @@ -336,6 +338,13 @@ static void CHECK_ACCESS(void* ptr) { } DO_ASSERT(!pthread_mutex_unlock(&allocation_mtx)); } +#define CHECK_INNER_FIELD_ACCESS_OR_NULL(v) \\ + if (v.is_owned && v.inner != NULL) { \\ + const void *p = __unmangle_inner_ptr(v.inner); \\ + if (p != NULL) { \\ + CHECK_ACCESS(p); \\ + } \\ + } void* __real_realloc(void* ptr, size_t newlen); void* __wrap_realloc(void* ptr, size_t len) { @@ -614,8 +623,10 @@ import javax.annotation.Nullable; out_java_enum += "/**\n * " + enum_doc_comment.replace("\n", "\n * ") + "\n */\n" out_java_enum += "public enum " + struct_name + " {\n" ord_v = 0 - for var in variants: - out_java_enum = out_java_enum + "\t" + var + ",\n" + for var, var_docs in variants: + if var_docs is not None: + out_java_enum += "\t/**\n\t * " + var_docs.replace("\n", "\n\t * ") + "\n\t */\n" + out_java_enum += "\t" + var + ",\n" out_c = out_c + "\t\tcase %d: return %s;\n" % (ord_v, var) ord_v = ord_v + 1 out_java_enum = out_java_enum + "\t; static native void init();\n" @@ -627,19 +638,19 @@ import javax.annotation.Nullable; out_c = out_c + "}\n" out_c = out_c + "static jclass " + struct_name + "_class = NULL;\n" - for var in variants: + for var, _ in variants: out_c = out_c + "static jfieldID " + struct_name + "_" + var + " = NULL;\n" out_c = out_c + self.c_fn_ty_pfx + "void JNICALL Java_org_ldk_enums_" + struct_name.replace("_", "_1") + "_init (" + self.c_fn_args_pfx + ") {\n" out_c = out_c + "\t" + struct_name + "_class = (*env)->NewGlobalRef(env, clz);\n" out_c = out_c + "\tCHECK(" + struct_name + "_class != NULL);\n" - for var in variants: + for var, _ in variants: out_c = out_c + "\t" + struct_name + "_" + var + " = (*env)->GetStaticFieldID(env, " + struct_name + "_class, \"" + var + "\", \"Lorg/ldk/enums/" + struct_name + ";\");\n" out_c = out_c + "\tCHECK(" + struct_name + "_" + var + " != NULL);\n" out_c = out_c + "}\n" out_c = out_c + "static inline jclass LDK" + struct_name + "_to_java(JNIEnv *env, LDK" + struct_name + " val) {\n" out_c = out_c + "\tswitch (val) {\n" ord_v = 0 - for var in variants: + for var, _ in variants: out_c = out_c + "\t\tcase " + var + ":\n" out_c = out_c + "\t\t\treturn (*env)->GetStaticObjectField(env, " + struct_name + "_class, " + struct_name + "_" + var + ");\n" ord_v = ord_v + 1 @@ -1049,7 +1060,9 @@ import javax.annotation.Nullable; out_java += ("\t\tprivate " + struct_name + "() {}\n") for var in variant_list: out_java += ("\t\tpublic final static class " + var.var_name + " extends " + struct_name + " {\n") - java_hu_subclasses = java_hu_subclasses + "\tpublic final static class " + var.var_name + " extends " + java_hu_type + " {\n" + if var.var_docs is not None: + java_hu_subclasses += "\t/**\n\t * " + var.var_docs.replace("\n", "\n\t * ") + "\n\t */\n" + java_hu_subclasses += "\tpublic final static class " + var.var_name + " extends " + java_hu_type + " {\n" out_java_enum += ("\t\tif (raw_val.getClass() == bindings." + struct_name + "." + var.var_name + ".class) {\n") out_java_enum += ("\t\t\treturn new " + var.var_name + "(ptr, (bindings." + struct_name + "." + var.var_name + ")raw_val);\n") init_meth_jty_str = ""