@@ -62,11 +62,8 @@ def __init__(self, **kwargs):
6262 # value = max accesswidth/memwidth used in node's descendants
6363 self .bus_width_db = {}
6464
65- # Dictionary of root-level type definitions
66- # key = definition type name
67- # value = representative object
68- # components, this is the original_def (which can be None in some cases)
69- self .namespace_db = {}
65+ # Set of root-level type definitions
66+ self .namespace_db = set ()
7067
7168 self .reuse_class_definitions = True
7269
@@ -184,14 +181,18 @@ def _get_class_name(self, node: Node) -> str:
184181 # Unable to determine a reusable type name. Fall back to hierarchical path
185182 class_name = node .get_rel_path (
186183 self .top .parent ,
187- hier_separator = "__" , array_suffix = "" , empty_array_suffix = ""
184+ hier_separator = "__" ,
185+ array_suffix = "" ,
186+ empty_array_suffix = "" ,
188187 )
189188 # Add prefix to prevent collision when mixing namespace methods
190189 class_name = "xtern__" + class_name
191190 else :
192191 class_name = node .get_rel_path (
193192 self .top .parent ,
194- hier_separator = "__" , array_suffix = "" , empty_array_suffix = ""
193+ hier_separator = "__" ,
194+ array_suffix = "" ,
195+ empty_array_suffix = "" ,
195196 )
196197
197198 return class_name
@@ -213,7 +214,7 @@ def _get_class_friendly_name(self, node: Node) -> str:
213214 else :
214215 friendly_name = node .get_rel_path (self .top .parent )
215216
216- return type ( node .inst ). __name__ + " - " + friendly_name
217+ return node .component_type_name + " - " + friendly_name
217218
218219
219220 def _get_inst_name (self , node : Node ) -> str :
@@ -235,19 +236,12 @@ def _class_needs_definition(self, node: Node) -> bool:
235236 type_name = self ._get_class_name (node )
236237
237238 if type_name in self .namespace_db :
238- obj = self .namespace_db [type_name ]
239-
240- # Sanity-check for collisions
241- if (obj is None ) or (obj is not node .original_def ):
242- raise RuntimeError ("Namespace collision! Type-name generation is not robust enough to create unique names!" )
243-
244- # This object likely represents the existing class definition
245239 # Ok to omit the re-definition
246240 return False
247241
248242 # Need to emit a new definition
249243 # First, register it in the namespace
250- self .namespace_db [ type_name ] = node . original_def
244+ self .namespace_db . add ( type_name )
251245 return True
252246
253247
0 commit comments