@@ -186,12 +186,12 @@ def _compute_addr_range(self, addr, size, step=1, *, alignment, extend):
186186 if overlaps :
187187 overlap_descrs = []
188188 for overlap in overlaps :
189- if overlap in self ._resources :
190- resource_range = self ._resources [overlap ]
189+ if id ( overlap ) in self ._resources :
190+ _ , resource_range = self ._resources [id ( overlap ) ]
191191 overlap_descrs .append ("resource {!r} at {:#x}..{:#x}"
192192 .format (overlap , resource_range .start , resource_range .stop ))
193- if overlap in self ._windows :
194- window_range = self ._windows [overlap ]
193+ if id ( overlap ) in self ._windows :
194+ _ , window_range = self ._windows [id ( overlap ) ]
195195 overlap_descrs .append ("window {!r} at {:#x}..{:#x}"
196196 .format (overlap , window_range .start , window_range .stop ))
197197 raise ValueError ("Address range {:#x}..{:#x} overlaps with {}"
@@ -231,8 +231,8 @@ def add_resource(self, resource, *, size, addr=None, alignment=None, extend=Fals
231231 Raises :exn:`ValueError` if the requested address and size, after alignment, would overlap
232232 with any resources or windows that have already been added, or would be out of bounds.
233233 """
234- if resource in self ._resources :
235- addr_range = self ._resources [resource ]
234+ if id ( resource ) in self ._resources :
235+ _ , addr_range = self ._resources [id ( resource ) ]
236236 raise ValueError ("Resource {!r} is already added at address range {:#x}..{:#x}"
237237 .format (resource , addr_range .start , addr_range .stop ))
238238
@@ -246,7 +246,7 @@ def add_resource(self, resource, *, size, addr=None, alignment=None, extend=Fals
246246
247247 addr_range = self ._compute_addr_range (addr , size , alignment = alignment , extend = extend )
248248 self ._ranges .insert (addr_range , resource )
249- self ._resources [resource ] = addr_range
249+ self ._resources [id ( resource ) ] = resource , addr_range
250250 self ._next_addr = addr_range .stop
251251 return addr_range .start , addr_range .stop
252252
@@ -259,7 +259,7 @@ def resources(self):
259259 ------------
260260 A tuple ``resource, (start, end)`` describing the address range assigned to the resource.
261261 """
262- for resource , resource_range in self ._resources .items ():
262+ for resource , resource_range in self ._resources .values ():
263263 yield resource , (resource_range .start , resource_range .stop )
264264
265265 def add_window (self , window , * , addr = None , sparse = None , extend = False ):
@@ -313,8 +313,8 @@ def add_window(self, window, *, addr=None, sparse=None, extend=False):
313313 if not isinstance (window , MemoryMap ):
314314 raise TypeError ("Window must be a MemoryMap, not {!r}"
315315 .format (window ))
316- if window in self ._windows :
317- addr_range = self ._windows [window ]
316+ if id ( window ) in self ._windows :
317+ _ , addr_range = self ._windows [id ( window ) ]
318318 raise ValueError ("Window {!r} is already added at address range {:#x}..{:#x}"
319319 .format (window , addr_range .start , addr_range .stop ))
320320
@@ -351,7 +351,7 @@ def add_window(self, window, *, addr=None, sparse=None, extend=False):
351351 addr_range = self ._compute_addr_range (addr , size , ratio , alignment = alignment ,
352352 extend = extend )
353353 self ._ranges .insert (addr_range , window )
354- self ._windows [window ] = addr_range
354+ self ._windows [id ( window ) ] = window , addr_range
355355 self ._next_addr = addr_range .stop
356356 return addr_range .start , addr_range .stop , addr_range .step
357357
@@ -367,7 +367,7 @@ def windows(self):
367367 contiguous addresses on the narrower bus that are accessed for each transaction on
368368 the wider bus. Otherwise, it is always 1.
369369 """
370- for window , window_range in self ._windows .items ():
370+ for window , window_range in self ._windows .values ():
371371 yield window , (window_range .start , window_range .stop , window_range .step )
372372
373373 def window_patterns (self ):
@@ -384,7 +384,7 @@ def window_patterns(self):
384384 the narrower bus that are accessed for each transaction on the wider bus. Otherwise,
385385 it is always 1.
386386 """
387- for window , window_range in self ._windows .items ():
387+ for window , window_range in self ._windows .values ():
388388 const_bits = self .addr_width - window .addr_width
389389 if const_bits > 0 :
390390 const_pat = "{:0{}b}" .format (window_range .start >> window .addr_width , const_bits )
@@ -418,9 +418,9 @@ def all_resources(self):
418418 uses sparse addressing.
419419 """
420420 for addr_range , assignment in self ._ranges .items ():
421- if assignment in self ._resources :
421+ if id ( assignment ) in self ._resources :
422422 yield assignment , (addr_range .start , addr_range .stop , self .data_width )
423- elif assignment in self ._windows :
423+ elif id ( assignment ) in self ._windows :
424424 for sub_resource , sub_descr in assignment .all_resources ():
425425 yield sub_resource , self ._translate (* sub_descr , assignment , addr_range )
426426 else :
@@ -448,11 +448,11 @@ def find_resource(self, resource):
448448 ----------
449449 Raises :exn:`KeyError` if the resource is not found.
450450 """
451- if resource in self ._resources :
452- resource_range = self ._resources [resource ]
451+ if id ( resource ) in self ._resources :
452+ _ , resource_range = self ._resources [id ( resource ) ]
453453 return resource_range .start , resource_range .stop , self .data_width
454454
455- for window , window_range in self ._windows .items ():
455+ for window , window_range in self ._windows .values ():
456456 try :
457457 return self ._translate (* window .find_resource (resource ), window , window_range )
458458 except KeyError :
@@ -476,10 +476,10 @@ def decode_address(self, address):
476476 if assignment is None :
477477 return
478478
479- if assignment in self ._resources :
479+ if id ( assignment ) in self ._resources :
480480 return assignment
481- elif assignment in self ._windows :
482- addr_range = self ._windows [assignment ]
481+ elif id ( assignment ) in self ._windows :
482+ _ , addr_range = self ._windows [id ( assignment ) ]
483483 return assignment .decode_address ((address - addr_range .start ) // addr_range .step )
484484 else :
485485 assert False # :nocov:
0 commit comments