From 94a2499ce52e5353c3b1b49202e64ded38ecad36 Mon Sep 17 00:00:00 2001 From: Robert Jordens Date: Sun, 6 Sep 2015 17:51:57 -0600 Subject: [PATCH] AutoCSR: refactor common gatherer code --- migen/bank/description.py | 38 ++++++++++++-------------------------- 1 file changed, 12 insertions(+), 26 deletions(-) diff --git a/migen/bank/description.py b/migen/bank/description.py index f6b267bed..107899e1d 100644 --- a/migen/bank/description.py +++ b/migen/bank/description.py @@ -105,8 +105,8 @@ def memprefix(prefix, memories, done): done.add(memory.huid) -class AutoCSR: - def get_memories(self): +def _make_gatherer(method, cls, prefix_cb): + def gatherer(self): try: exclude = self.autocsr_exclude except AttributeError: @@ -118,30 +118,16 @@ class AutoCSR: r = [] for k, v in xdir(self, True): if k not in exclude: - if isinstance(v, Memory): + if isinstance(v, cls): r.append(v) - elif hasattr(v, "get_memories") and callable(v.get_memories): - memories = v.get_memories() - memprefix(k + "_", memories, prefixed) - r += memories + elif hasattr(v, method) and callable(getattr(v, method)): + items = getattr(v, method)() + prefix_cb(k + "_", items, prefixed) + r += items return sorted(r, key=lambda x: x.huid) + return gatherer - def get_csrs(self): - try: - exclude = self.autocsr_exclude - except AttributeError: - exclude = {} - try: - prefixed = self.__prefixed - except AttributeError: - prefixed = self.__prefixed = set() - r = [] - for k, v in xdir(self, True): - if k not in exclude: - if isinstance(v, _CSRBase): - r.append(v) - elif hasattr(v, "get_csrs") and callable(v.get_csrs): - csrs = v.get_csrs() - csrprefix(k + "_", csrs, prefixed) - r += csrs - return sorted(r, key=lambda x: x.huid) + +class AutoCSR: + get_memories = _make_gatherer("get_memories", Memory, memprefix) + get_csrs = _make_gatherer("get_csrs", _CSRBase, csrprefix)