From: William D. Jones Date: Tue, 15 Jan 2019 21:05:25 +0000 (-0500) Subject: hdl.xfrm: Add on_AnyConst and on_AnySeq abstract methods for ValueVisitor and children. X-Git-Tag: working~84 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=77728c2deaaae3aa6ad4c4b695fead63cd7e61ed;p=nmigen.git hdl.xfrm: Add on_AnyConst and on_AnySeq abstract methods for ValueVisitor and children. --- diff --git a/nmigen/back/pysim.py b/nmigen/back/pysim.py index 1278923..95b2355 100644 --- a/nmigen/back/pysim.py +++ b/nmigen/back/pysim.py @@ -87,6 +87,12 @@ class _RHSValueCompiler(_ValueCompiler): def on_Const(self, value): return lambda state: value.value + def on_AnyConst(self, value): + raise NotImplementedError # :nocov: + + def on_AnySeq(self, value): + raise NotImplementedError # :nocov: + def on_Signal(self, value): if self.sensitivity is not None: self.sensitivity.add(value) @@ -219,6 +225,12 @@ class _LHSValueCompiler(_ValueCompiler): def on_Const(self, value): raise TypeError # :nocov: + def on_AnyConst(self, value): + raise TypeError # :nocov: + + def on_AnySeq(self, value): + raise TypeError # :nocov: + def on_Signal(self, value): shape = value.shape() value_slot = self.signal_slots[value] diff --git a/nmigen/hdl/xfrm.py b/nmigen/hdl/xfrm.py index 33c534e..728b95b 100644 --- a/nmigen/hdl/xfrm.py +++ b/nmigen/hdl/xfrm.py @@ -23,6 +23,14 @@ class ValueVisitor(metaclass=ABCMeta): def on_Const(self, value): pass # :nocov: + @abstractmethod + def on_AnyConst(self, value): + pass # :nocov: + + @abstractmethod + def on_AnySeq(self, value): + pass # :nocov: + @abstractmethod def on_Signal(self, value): pass # :nocov: @@ -69,6 +77,10 @@ class ValueVisitor(metaclass=ABCMeta): def on_value(self, value): if type(value) is Const: new_value = self.on_Const(value) + elif type(value) is AnyConst: + new_value = self.on_AnyConst(value) + elif type(value) is AnySeq: + new_value = self.on_AnySeq(value) elif type(value) is Signal: new_value = self.on_Signal(value) elif type(value) is Record: @@ -104,6 +116,12 @@ class ValueTransformer(ValueVisitor): def on_Const(self, value): return value + def on_AnyConst(self, value): + return value + + def on_AnySeq(self, value): + return value + def on_Signal(self, value): return value