mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 03:32:29 +00:00 
			
		
		
		
	py_wrap_generator: Fix handling of method name collisions
If two methods have the same signature but for qualifiers the Python
binding doesn't care about ('const'), do not generate a mangled name for
the method.
Fixes
    .def<Wire (Module::*)(const IdString* )>("wire__YOSYS_NAMESPACE_RTLIL_IdString", &Module::wire__YOSYS_NAMESPACE_RTLIL_IdString)
    .def<Cell (Module::*)(const IdString* )>("cell__YOSYS_NAMESPACE_RTLIL_IdString", &Module::cell__YOSYS_NAMESPACE_RTLIL_IdString)
in the output after the previous change.
			
			
This commit is contained in:
		
							parent
							
								
									f94f544b50
								
							
						
					
					
						commit
						bd06338172
					
				
					 1 changed files with 16 additions and 6 deletions
				
			
		|  | @ -1367,10 +1367,17 @@ class WFunction: | |||
| 			func.args.append(parsed) | ||||
| 		return func | ||||
| 
 | ||||
| 	@property | ||||
| 	def mangled_name(self): | ||||
| 		mangled_typename = lambda code: code.replace("::", "_").replace("<","_").replace(">","_") \ | ||||
| 										   .replace(" ","").replace("*","").replace(",","") | ||||
| 
 | ||||
| 		return self.name + "".join( | ||||
| 			f"__{mangled_typename(arg.wtype.gen_text_cpp())}" for arg in self.args | ||||
| 		) | ||||
| 
 | ||||
| 	def gen_alias(self): | ||||
| 		self.alias = self.name | ||||
| 		for arg in self.args: | ||||
| 			self.alias += "__" + arg.wtype.gen_text_cpp().replace("::", "_").replace("<","_").replace(">","_").replace(" ","").replace("*","").replace(",","") | ||||
| 		self.alias = self.mangled_name | ||||
| 
 | ||||
| 	def gen_decl(self): | ||||
| 		if self.duplicate: | ||||
|  | @ -2196,12 +2203,15 @@ def clean_duplicates(): | |||
| 			for fun in class_.found_funs: | ||||
| 				if fun.gen_decl_hash_py() in known_decls: | ||||
| 					debug("Multiple declarations of " + fun.gen_decl_hash_py(),3) | ||||
| 
 | ||||
| 					other = known_decls[fun.gen_decl_hash_py()] | ||||
| 					other.gen_alias() | ||||
| 					fun.gen_alias() | ||||
| 					if fun.gen_decl_hash_py() == other.gen_decl_hash_py(): | ||||
| 					if fun.mangled_name == other.mangled_name: | ||||
| 						fun.duplicate = True | ||||
| 						debug("Disabled \"" + fun.gen_decl_hash_py() + "\"", 3) | ||||
| 						continue | ||||
| 
 | ||||
| 					other.gen_alias() | ||||
| 					fun.gen_alias() | ||||
| 				else: | ||||
| 					known_decls[fun.gen_decl_hash_py()] = fun | ||||
| 			known_decls = [] | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue