@@ -492,6 +492,7 @@ def create_idxfile(self, idx_file_path: str, wrappers_namespace):
492492class SwigInputGenerator :
493493 """Generates a swig input .i file for an ITK module."""
494494
495+ previously_created_constructors_set = set ()
495496 notWrapped = [
496497 r"std::_Deque_alloc<.+>" ,
497498 r"itk::AtomicInt<.+>" ,
@@ -1070,13 +1071,16 @@ def generate_class(self, typedef, indent=0):
10701071 w = access not in self .options .access_warnings
10711072
10721073 # iterate over the members
1073- for member in get_type (typedef ).get_members (access = access ):
1074+ all_members = list (get_type (typedef ).get_members (access = access ))
1075+ for member in all_members :
10741076 if isinstance (member , decls .typedef .typedef_t ):
10751077 self .warn (
10761078 51 , f"Member typedef are not supported: { member .name } " , w
10771079 )
10781080 elif isinstance (member , decls .member_function_t ):
1079- self .generate_method (typedef , member , indent , w )
1081+ self .generate_method (
1082+ typedef , member , indent , w , is_operator = False
1083+ )
10801084 elif isinstance (member , decls .constructor_t ):
10811085 self .generate_constructor (typedef , member , indent , w )
10821086 elif isinstance (member , decls .member_operator_t ):
@@ -1298,6 +1302,14 @@ def generate_constructor(self, typedef, constructor, indent, w):
12981302 # f"(Perhaps RValueReferenceType argument move constructor): {constructor_declaration_str}"
12991303 # )
13001304 return
1305+ if constructor_declaration_str in self .previously_created_constructors_set :
1306+ # print(
1307+ # "WARNING: Duplicate constructor attempted to be written: "
1308+ # f"{constructor_declaration_str} for {typedef.name}"
1309+ # )
1310+ return
1311+
1312+ self .previously_created_constructors_set .add (constructor_declaration_str )
13011313 self .outputFile .write (" " * indent )
13021314 self .outputFile .write (constructor_declaration_str )
13031315
@@ -1333,7 +1345,7 @@ def generate_nested_enum(self, _typedef, enum, indent, _w):
13331345 python_enum_names = [f"{ enum .name } _{ name .strip ()} " for name in content ]
13341346 self .classes [self .current_class ].enums += python_enum_names
13351347
1336- def generate_method (self , typedef , method , indent , w , is_operator = False ):
1348+ def generate_method (self , typedef , method , indent , w , is_operator ):
13371349 self .info (f"Generating interface for method '{ typedef .name } ::{ method .name } '." )
13381350 # avoid the apply method for the class vnl_c_vector: the signature is
13391351 # quite strange and currently confuse swig :-/
0 commit comments