Skip to content

Commit 94a2499

Browse files
jordenssbourdeauducq
authored andcommittedSep 7, 2015
AutoCSR: refactor common gatherer code
1 parent 7363f00 commit 94a2499

File tree

1 file changed

+12
-26
lines changed

1 file changed

+12
-26
lines changed
 

Diff for: ‎migen/bank/description.py

+12-26
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,8 @@ def memprefix(prefix, memories, done):
105105
done.add(memory.huid)
106106

107107

108-
class AutoCSR:
109-
def get_memories(self):
108+
def _make_gatherer(method, cls, prefix_cb):
109+
def gatherer(self):
110110
try:
111111
exclude = self.autocsr_exclude
112112
except AttributeError:
@@ -118,30 +118,16 @@ def get_memories(self):
118118
r = []
119119
for k, v in xdir(self, True):
120120
if k not in exclude:
121-
if isinstance(v, Memory):
121+
if isinstance(v, cls):
122122
r.append(v)
123-
elif hasattr(v, "get_memories") and callable(v.get_memories):
124-
memories = v.get_memories()
125-
memprefix(k + "_", memories, prefixed)
126-
r += memories
123+
elif hasattr(v, method) and callable(getattr(v, method)):
124+
items = getattr(v, method)()
125+
prefix_cb(k + "_", items, prefixed)
126+
r += items
127127
return sorted(r, key=lambda x: x.huid)
128+
return gatherer
128129

129-
def get_csrs(self):
130-
try:
131-
exclude = self.autocsr_exclude
132-
except AttributeError:
133-
exclude = {}
134-
try:
135-
prefixed = self.__prefixed
136-
except AttributeError:
137-
prefixed = self.__prefixed = set()
138-
r = []
139-
for k, v in xdir(self, True):
140-
if k not in exclude:
141-
if isinstance(v, _CSRBase):
142-
r.append(v)
143-
elif hasattr(v, "get_csrs") and callable(v.get_csrs):
144-
csrs = v.get_csrs()
145-
csrprefix(k + "_", csrs, prefixed)
146-
r += csrs
147-
return sorted(r, key=lambda x: x.huid)
130+
131+
class AutoCSR:
132+
get_memories = _make_gatherer("get_memories", Memory, memprefix)
133+
get_csrs = _make_gatherer("get_csrs", _CSRBase, csrprefix)

0 commit comments

Comments
 (0)
Please sign in to comment.