hdl.xfrm: Add on_AnyConst and on_AnySeq abstract methods for ValueVisitor and children.

This commit is contained in:
William D. Jones 2019-01-15 16:05:25 -05:00 committed by whitequark
parent 6fdbc3d885
commit 77728c2dea
2 changed files with 30 additions and 0 deletions

View file

@ -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]

View file

@ -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