hdl.ast: suggest bit_select or word_select when indexing with Value.
Fixes #1044.
This commit is contained in:
parent
9e9790377a
commit
b40c18fb00
|
@ -370,10 +370,14 @@ class Value(metaclass=ABCMeta):
|
||||||
key += n
|
key += n
|
||||||
return Slice(self, key, key + 1, src_loc_at=1)
|
return Slice(self, key, key + 1, src_loc_at=1)
|
||||||
elif isinstance(key, slice):
|
elif isinstance(key, slice):
|
||||||
|
if isinstance(key.start, Value) or isinstance(key.stop, Value):
|
||||||
|
raise TypeError(f"Cannot slice value with a value; use Value.bit_select() or Value.word_select() instead")
|
||||||
start, stop, step = key.indices(n)
|
start, stop, step = key.indices(n)
|
||||||
if step != 1:
|
if step != 1:
|
||||||
return Cat(self[i] for i in range(start, stop, step))
|
return Cat(self[i] for i in range(start, stop, step))
|
||||||
return Slice(self, start, stop, src_loc_at=1)
|
return Slice(self, start, stop, src_loc_at=1)
|
||||||
|
elif isinstance(key, Value):
|
||||||
|
raise TypeError(f"Cannot index value with a value; use Value.bit_select() instead")
|
||||||
else:
|
else:
|
||||||
raise TypeError(f"Cannot index value with {key!r}")
|
raise TypeError(f"Cannot index value with {key!r}")
|
||||||
|
|
||||||
|
|
|
@ -303,6 +303,15 @@ class ValueTestCase(FHDLTestCase):
|
||||||
with self.assertRaisesRegex(TypeError,
|
with self.assertRaisesRegex(TypeError,
|
||||||
r"^Cannot index value with 'str'$"):
|
r"^Cannot index value with 'str'$"):
|
||||||
Const(31)["str"]
|
Const(31)["str"]
|
||||||
|
with self.assertRaisesRegex(TypeError,
|
||||||
|
r"^Cannot index value with a value; use Value.bit_select\(\) instead$"):
|
||||||
|
Const(31)[Signal(3)]
|
||||||
|
s = Signal(3)
|
||||||
|
with self.assertRaisesRegex(TypeError,
|
||||||
|
r"^Cannot slice value with a value; use Value.bit_select\(\) or Value.word_select\(\) instead$"):
|
||||||
|
Const(31)[s:s+3]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def test_shift_left(self):
|
def test_shift_left(self):
|
||||||
self.assertRepr(Const(256, unsigned(9)).shift_left(0),
|
self.assertRepr(Const(256, unsigned(9)).shift_left(0),
|
||||||
|
|
Loading…
Reference in a new issue