@@ -479,7 +479,7 @@ def c_constr_native_complex_enum(self, struct_name, variant, c_params):
479479 ret = ret + ", " + param
480480 return ret + ")"
481481
482- def native_c_map_trait (self , struct_name , field_vars , field_fns , trait_doc_comment ):
482+ def native_c_map_trait (self , struct_name , field_vars , flattened_field_vars , field_fns , trait_doc_comment ):
483483 out_java_trait = ""
484484 out_java = ""
485485
@@ -492,14 +492,14 @@ def native_c_map_trait(self, struct_name, field_vars, field_fns, trait_doc_comme
492492 out_java_trait = out_java_trait + "\t final bindings." + struct_name + " bindings_instance;\n "
493493 out_java_trait = out_java_trait + "\t " + struct_name .replace ("LDK" , "" ) + "(Object _dummy, long ptr) { super(ptr); bindings_instance = null; }\n "
494494 out_java_trait = out_java_trait + "\t private " + struct_name .replace ("LDK" , "" ) + "(bindings." + struct_name + " arg"
495- for var in field_vars :
495+ for var in flattened_field_vars :
496496 if isinstance (var , ConvInfo ):
497497 out_java_trait = out_java_trait + ", " + var .java_hu_ty + " " + var .arg_name
498498 else :
499499 out_java_trait = out_java_trait + ", bindings." + var [0 ] + " " + var [1 ]
500500 out_java_trait = out_java_trait + ") {\n "
501501 out_java_trait = out_java_trait + "\t \t super(bindings." + struct_name + "_new(arg"
502- for var in field_vars :
502+ for var in flattened_field_vars :
503503 if isinstance (var , ConvInfo ):
504504 if var .from_hu_conv is not None :
505505 out_java_trait = out_java_trait + ", " + var .from_hu_conv [0 ]
@@ -509,7 +509,7 @@ def native_c_map_trait(self, struct_name, field_vars, field_fns, trait_doc_comme
509509 out_java_trait = out_java_trait + ", " + var [1 ]
510510 out_java_trait = out_java_trait + "));\n "
511511 out_java_trait = out_java_trait + "\t \t this.ptrs_to.add(arg);\n "
512- for var in field_vars :
512+ for var in flattened_field_vars :
513513 if isinstance (var , ConvInfo ):
514514 if var .from_hu_conv is not None and var .from_hu_conv [1 ] != "" :
515515 out_java_trait = out_java_trait + "\t \t " + var .from_hu_conv [1 ].replace ("\n " , "\n \t \t " ) + ";\n "
@@ -524,7 +524,7 @@ def native_c_map_trait(self, struct_name, field_vars, field_fns, trait_doc_comme
524524
525525 java_trait_constr = "\t private static class " + struct_name + "Holder { " + struct_name .replace ("LDK" , "" ) + " held; }\n "
526526 java_trait_constr = java_trait_constr + "\t public static " + struct_name .replace ("LDK" , "" ) + " new_impl(" + struct_name .replace ("LDK" , "" ) + "Interface arg"
527- for var in field_vars :
527+ for var in flattened_field_vars :
528528 if isinstance (var , ConvInfo ):
529529 java_trait_constr = java_trait_constr + ", " + var .java_hu_ty + " " + var .arg_name
530530 else :
@@ -593,14 +593,25 @@ def native_c_map_trait(self, struct_name, field_vars, field_fns, trait_doc_comme
593593 if isinstance (var , ConvInfo ):
594594 java_trait_constr = java_trait_constr + ", " + var .arg_name
595595 else :
596- java_trait_constr = java_trait_constr + ", " + var [1 ] + ".new_impl(" + var [1 ] + "_impl).bindings_instance"
596+ java_trait_constr += ", " + var [1 ] + ".new_impl(" + var [1 ] + "_impl"
597+ for suparg in var [2 ]:
598+ if isinstance (suparg , ConvInfo ):
599+ java_trait_constr += ", " + suparg .arg_name
600+ else :
601+ java_trait_constr += ", " + suparg [1 ]
602+ java_trait_constr += ").bindings_instance"
603+ for suparg in var [2 ]:
604+ if isinstance (suparg , ConvInfo ):
605+ java_trait_constr += ", " + suparg .arg_name
606+ else :
607+ java_trait_constr += ", " + suparg [1 ]
597608 out_java_trait = out_java_trait + "\t }\n "
598609 out_java_trait = out_java_trait + java_trait_constr + ");\n \t \t return impl_holder.held;\n \t }\n "
599610
600611 out_java = out_java + "\t }\n "
601612
602613 out_java = out_java + "\t public static native long " + struct_name + "_new(" + struct_name + " impl"
603- for var in field_vars :
614+ for var in flattened_field_vars :
604615 if isinstance (var , ConvInfo ):
605616 out_java = out_java + ", " + var .java_ty + " " + var .arg_name
606617 else :
@@ -612,7 +623,7 @@ def native_c_map_trait(self, struct_name, field_vars, field_fns, trait_doc_comme
612623 out_c = out_c + "\t atomic_size_t refcnt;\n "
613624 out_c = out_c + "\t JavaVM *vm;\n "
614625 out_c = out_c + "\t jweak o;\n "
615- for var in field_vars :
626+ for var in flattened_field_vars :
616627 if isinstance (var , ConvInfo ):
617628 # We're a regular ol' field
618629 pass
@@ -688,7 +699,7 @@ def native_c_map_trait(self, struct_name, field_vars, field_fns, trait_doc_comme
688699 out_c = out_c + "}\n "
689700
690701 out_c = out_c + "static inline " + struct_name + " " + struct_name + "_init (" + self .c_fn_args_pfx + ", jobject o"
691- for var in field_vars :
702+ for var in flattened_field_vars :
692703 if isinstance (var , ConvInfo ):
693704 out_c = out_c + ", " + var .c_ty + " " + var .arg_name
694705 else :
@@ -707,7 +718,7 @@ def native_c_map_trait(self, struct_name, field_vars, field_fns, trait_doc_comme
707718 out_c = out_c + "\t calls->" + fn_name + "_meth = (*env)->GetMethodID(env, c, \" " + fn_name + "\" , \" " + java_meth_descr + "\" );\n "
708719 out_c = out_c + "\t CHECK(calls->" + fn_name + "_meth != NULL);\n "
709720
710- for var in field_vars :
721+ for var in flattened_field_vars :
711722 if isinstance (var , ConvInfo ) and var .arg_conv is not None :
712723 out_c = out_c + "\n \t " + var .arg_conv .replace ("\n " , "\n \t " ) + "\n "
713724 out_c = out_c + "\n \t " + struct_name + " ret = {\n "
@@ -728,24 +739,30 @@ def native_c_map_trait(self, struct_name, field_vars, field_fns, trait_doc_comme
728739 out_c = out_c + "\t \t ." + var .var_name + " = " + var .var_name + ",\n "
729740 out_c = out_c + "\t \t .set_" + var .var_name + " = NULL,\n "
730741 else :
731- out_c = out_c + "\t \t ." + var [1 ] + " = " + var [0 ] + "_init(env, clz, " + var [1 ] + "),\n "
742+ out_c += "\t \t ." + var [1 ] + " = " + var [0 ] + "_init(env, clz, " + var [1 ]
743+ for suparg in var [2 ]:
744+ if isinstance (suparg , ConvInfo ):
745+ out_c = out_c + ", " + suparg .arg_name
746+ else :
747+ out_c = out_c + ", " + suparg [1 ]
748+ out_c += "),\n "
732749 out_c = out_c + "\t };\n "
733- for var in field_vars :
750+ for var in flattened_field_vars :
734751 if not isinstance (var , ConvInfo ):
735752 out_c = out_c + "\t calls->" + var [1 ] + " = ret." + var [1 ] + ".this_arg;\n "
736753 out_c = out_c + "\t return ret;\n "
737754 out_c = out_c + "}\n "
738755
739756 out_c = out_c + self .c_fn_ty_pfx + "int64_t " + self .c_fn_name_define_pfx (struct_name + "_new" , True ) + "jobject o"
740- for var in field_vars :
757+ for var in flattened_field_vars :
741758 if isinstance (var , ConvInfo ):
742759 out_c = out_c + ", " + var .c_ty + " " + var .arg_name
743760 else :
744761 out_c = out_c + ", jobject " + var [1 ]
745762 out_c = out_c + ") {\n "
746763 out_c = out_c + "\t " + struct_name + " *res_ptr = MALLOC(sizeof(" + struct_name + "), \" " + struct_name + "\" );\n "
747764 out_c = out_c + "\t *res_ptr = " + struct_name + "_init(env, clz, o"
748- for var in field_vars :
765+ for var in flattened_field_vars :
749766 if isinstance (var , ConvInfo ):
750767 out_c = out_c + ", " + var .arg_name
751768 else :
0 commit comments