mirror of
https://github.com/enjoy-digital/litex.git
synced 2025-01-04 09:52:26 -05:00
replace use of __dict__ with dir()/xdir()
This commit is contained in:
parent
892c12bff5
commit
f658802ff8
10 changed files with 27 additions and 12 deletions
|
@ -1,5 +1,4 @@
|
|||
from operator import itemgetter
|
||||
|
||||
from migen.util.misc import xdir
|
||||
from migen.fhdl.std import *
|
||||
from migen.bus import csr
|
||||
from migen.bank.description import *
|
||||
|
@ -69,7 +68,7 @@ class BankArray(Module):
|
|||
def scan(self, ifargs, ifkwargs):
|
||||
self.banks = []
|
||||
self.srams = []
|
||||
for name, obj in sorted(self.source.__dict__.items(), key=itemgetter(0)):
|
||||
for name, obj in xdir(self.source, True):
|
||||
if hasattr(obj, "get_csrs"):
|
||||
csrs = obj.get_csrs()
|
||||
else:
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
from migen.util.misc import xdir
|
||||
from migen.fhdl.std import *
|
||||
from migen.fhdl.tracer import get_obj_var_name
|
||||
|
||||
|
@ -107,7 +108,7 @@ class AutoCSR:
|
|||
except AttributeError:
|
||||
prefixed = self.__prefixed = set()
|
||||
r = []
|
||||
for k, v in self.__dict__.items():
|
||||
for k, v in xdir(self, True):
|
||||
if k not in exclude:
|
||||
if isinstance(v, Memory):
|
||||
r.append(v)
|
||||
|
@ -127,7 +128,7 @@ class AutoCSR:
|
|||
except AttributeError:
|
||||
prefixed = self.__prefixed = set()
|
||||
r = []
|
||||
for k, v in self.__dict__.items():
|
||||
for k, v in xdir(self, True):
|
||||
if k not in exclude:
|
||||
if isinstance(v, _CSRBase):
|
||||
r.append(v)
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
from migen.util.misc import xdir
|
||||
from migen.fhdl.std import *
|
||||
from migen.bank.description import *
|
||||
from migen.genlib.misc import optree
|
||||
|
@ -46,7 +47,7 @@ class EventManager(Module, AutoCSR):
|
|||
self.irq = Signal()
|
||||
|
||||
def do_finalize(self):
|
||||
sources_u = [v for v in self.__dict__.values() if isinstance(v, _EventSource)]
|
||||
sources_u = [v for k, v in xdir(self, True) if isinstance(v, _EventSource)]
|
||||
sources = sorted(sources_u, key=lambda x: x.huid)
|
||||
n = len(sources)
|
||||
self.status = CSR(n)
|
||||
|
|
|
@ -20,6 +20,9 @@ class ModuleDecorator:
|
|||
self.transform_fragment(f)
|
||||
return f
|
||||
|
||||
def __dir__(self):
|
||||
return dir(self._md_decorated)
|
||||
|
||||
class DecorateModule:
|
||||
def __init__(self, decorator, *dec_args, **dec_kwargs):
|
||||
self.decorator = decorator
|
||||
|
|
|
@ -12,7 +12,7 @@ class _Node:
|
|||
self.children = OrderedDict()
|
||||
|
||||
def _display_tree(filename, tree):
|
||||
from migen.graph.treeviz import RenderNode
|
||||
from migen.util.treeviz import RenderNode
|
||||
|
||||
def _to_render_node(name, node):
|
||||
children = [_to_render_node(k, v) for k, v in node.children.items()]
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
from migen.util.misc import xdir
|
||||
from migen.fhdl.std import *
|
||||
from migen.genlib.misc import optree
|
||||
from migen.genlib.record import *
|
||||
|
@ -32,7 +33,7 @@ def get_endpoints(obj, filt=_Endpoint):
|
|||
if hasattr(obj, "get_endpoints") and callable(obj.get_endpoints):
|
||||
return obj.get_endpoints(filt)
|
||||
r = dict()
|
||||
for k, v in obj.__dict__.items():
|
||||
for k, v in xdir(obj, True):
|
||||
if isinstance(v, filt):
|
||||
r[k] = v
|
||||
return r
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
from migen.util.misc import xdir
|
||||
from migen.fhdl.std import *
|
||||
from migen.flow.actor import *
|
||||
from migen.flow.actor import _Endpoint
|
||||
|
@ -10,13 +11,13 @@ class UnifiedIOObject(Module):
|
|||
def do_finalize(self):
|
||||
if self.get_dataflow():
|
||||
self.busy = Signal()
|
||||
self.specials += set(v for v in self.__dict__.values() if isinstance(v, Memory))
|
||||
self.specials += set(v for k, v in xdir(self, True) if isinstance(v, Memory))
|
||||
|
||||
def get_dataflow(self):
|
||||
return dict((k, v) for k, v in self.__dict__.items() if isinstance(v, _Endpoint))
|
||||
return dict((k, v) for k, v in xdir(self, True) if isinstance(v, _Endpoint))
|
||||
|
||||
def get_buses(self):
|
||||
return dict((k, v) for k, v in self.__dict__.items() if isinstance(v, (wishbone.Interface, Memory)))
|
||||
return dict((k, v) for k, v in xdir(self, True) if isinstance(v, (wishbone.Interface, Memory)))
|
||||
|
||||
(_WAIT_COMPLETE, _WAIT_POLL) = range(2)
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@ import inspect
|
|||
import ast
|
||||
from collections import OrderedDict
|
||||
|
||||
from migen.util.misc import xdir
|
||||
from migen.fhdl.structure import *
|
||||
from migen.fhdl.visit import TransformModule
|
||||
from migen.fhdl.specials import Memory
|
||||
|
@ -293,7 +294,8 @@ class Pytholite(UnifiedIOObject):
|
|||
if self.get_dataflow():
|
||||
self.busy.reset = 1
|
||||
self.memory_ports = dict()
|
||||
for mem in self.__dict__.values():
|
||||
for key in xdir(self):
|
||||
mem = getattr(self, key)
|
||||
if isinstance(mem, Memory):
|
||||
port = mem.get_port(write_capable=True, we_granularity=8)
|
||||
self.specials += port
|
||||
|
|
7
migen/util/misc.py
Normal file
7
migen/util/misc.py
Normal file
|
@ -0,0 +1,7 @@
|
|||
def xdir(obj, return_values=False):
|
||||
for attr in dir(obj):
|
||||
if attr[:2] != "__" and attr[-2:] != "__":
|
||||
if return_values:
|
||||
yield attr, getattr(obj, attr)
|
||||
else:
|
||||
yield attr
|
Loading…
Reference in a new issue