Commit d0676e2d authored by Sebastien Bourdeauducq's avatar Sebastien Bourdeauducq
Browse files

migen/fhdl/autofragment: factorize

parent d0d2df3c
import collections
from migen.fhdl.structure import * from migen.fhdl.structure import *
from migen.fhdl.specials import Special from migen.fhdl.specials import Special
from migen.fhdl.tools import flat_iteration
def flat_list(e):
if isinstance(e, collections.Iterable):
return flat_iteration(e)
else:
return [e]
class _FModuleProxy: class _FModuleProxy:
def __init__(self, fm): def __init__(self, fm):
...@@ -7,10 +16,7 @@ class _FModuleProxy: ...@@ -7,10 +16,7 @@ class _FModuleProxy:
class _FModuleComb(_FModuleProxy): class _FModuleComb(_FModuleProxy):
def __iadd__(self, other): def __iadd__(self, other):
if isinstance(other, (list, tuple)): self._fm._fragment.comb += flat_list(other)
self._fm._fragment.comb += other
else:
self._fm._fragment.comb.append(other)
return self return self
def _cd_append(d, key, statements): def _cd_append(d, key, statements):
...@@ -19,10 +25,7 @@ def _cd_append(d, key, statements): ...@@ -19,10 +25,7 @@ def _cd_append(d, key, statements):
except KeyError: except KeyError:
l = [] l = []
d[key] = l d[key] = l
if isinstance(statements, (list, tuple)): l += flat_list(statements)
l += statements
else:
l.append(statements)
class _FModuleSyncCD: class _FModuleSyncCD:
def __init__(self, fm, cd): def __init__(self, fm, cd):
...@@ -47,18 +50,12 @@ class _FModuleSync(_FModuleProxy): ...@@ -47,18 +50,12 @@ class _FModuleSync(_FModuleProxy):
class _FModuleSpecials(_FModuleProxy): class _FModuleSpecials(_FModuleProxy):
def __iadd__(self, other): def __iadd__(self, other):
if isinstance(other, (set, list, tuple)): self._fm._fragment.specials |= set(flat_list(other))
self._fm._fragment.specials |= set(other)
else:
self._fm._fragment.specials.add(other)
return self return self
class _FModuleSubmodules(_FModuleProxy): class _FModuleSubmodules(_FModuleProxy):
def __iadd__(self, other): def __iadd__(self, other):
if isinstance(other, (list, tuple)): self._fm._submodules += flat_list(other)
self._fm._submodules += other
else:
self._fm._submodules.append(other)
return self return self
class FModule: class FModule:
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment