hdl.ast: fix naming of Signal.like() signals when tracer fails.

This commit is contained in:
whitequark 2019-01-16 15:55:28 +00:00
parent f2425001aa
commit cb2f18ee37
2 changed files with 9 additions and 3 deletions

View file

@ -611,7 +611,7 @@ class Signal(Value, DUID):
self.decoder = decoder
@classmethod
def like(cls, other, src_loc_at=0, **kwargs):
def like(cls, other, name=None, src_loc_at=0, **kwargs):
"""Create Signal based on another.
Parameters
@ -619,8 +619,12 @@ class Signal(Value, DUID):
other : Value
Object to base this Signal on.
"""
kw = dict(shape=cls.wrap(other).shape(),
name=tracer.get_var_name(depth=2 + src_loc_at))
if name is None:
try:
name = tracer.get_var_name(depth=2 + src_loc_at)
except tracer.NameNotFound:
name = "$like"
kw = dict(shape=cls.wrap(other).shape(), name=name)
if isinstance(other, cls):
kw.update(reset=other.reset, reset_less=other.reset_less,
attrs=other.attrs, decoder=other.decoder)

View file

@ -458,6 +458,8 @@ class SignalTestCase(FHDLTestCase):
self.assertEqual(s5.decoder, str)
s6 = Signal.like(10)
self.assertEqual(s6.shape(), (4, False))
s7 = [Signal.like(Signal(4))][0]
self.assertEqual(s7.name, "$like")
class ClockSignalTestCase(FHDLTestCase):