hdl.ast: deprecate UserValue in favor of ValueCastable.

Closes #527.
This commit is contained in:
whitequark 2020-11-06 02:21:53 +00:00
parent c9fd000103
commit bde37fe2f2
3 changed files with 27 additions and 15 deletions

View file

@ -1237,6 +1237,7 @@ class ArrayProxy(Value):
return "(proxy (array [{}]) {!r})".format(", ".join(map(repr, self.elems)), self.index)
# TODO(nmigen-0.4): remove
class UserValue(Value):
"""Value with custom lowering.
@ -1257,6 +1258,7 @@ class UserValue(Value):
* Indexing or iterating through individual bits;
* Adding an assignment to the value to a ``Module`` using ``m.d.<domain> +=``.
"""
@deprecated("instead of `UserValue`, use `ValueCastable`", stacklevel=3)
def __init__(self, *, src_loc_at=0):
super().__init__(src_loc_at=1 + src_loc_at)
self.__lowered = None

View file

@ -1009,6 +1009,8 @@ class MockUserValue(UserValue):
class UserValueTestCase(FHDLTestCase):
def test_shape(self):
with warnings.catch_warnings():
warnings.filterwarnings(action="ignore", category=DeprecationWarning)
uv = MockUserValue(1)
self.assertEqual(uv.shape(), unsigned(1))
self.assertIsInstance(uv.shape(), Shape)
@ -1017,6 +1019,8 @@ class UserValueTestCase(FHDLTestCase):
self.assertEqual(uv.lower_count, 1)
def test_lower_to_user_value(self):
with warnings.catch_warnings():
warnings.filterwarnings(action="ignore", category=DeprecationWarning)
uv = MockUserValue(MockUserValue(1))
self.assertEqual(uv.shape(), unsigned(1))
self.assertIsInstance(uv.shape(), Shape)

View file

@ -1,5 +1,7 @@
# nmigen: UnusedElaboratable=no
import warnings
from nmigen.hdl.ast import *
from nmigen.hdl.cd import *
from nmigen.hdl.ir import *
@ -614,6 +616,8 @@ class UserValueTestCase(FHDLTestCase):
def setUp(self):
self.s = Signal()
self.c = Signal()
with warnings.catch_warnings():
warnings.filterwarnings(action="ignore", category=DeprecationWarning)
self.uv = MockUserValue(self.s)
def test_lower(self):
@ -645,6 +649,8 @@ class UserValueRecursiveTestCase(UserValueTestCase):
def setUp(self):
self.s = Signal()
self.c = Signal()
with warnings.catch_warnings():
warnings.filterwarnings(action="ignore", category=DeprecationWarning)
self.uv = MockUserValue(MockUserValue(self.s))
# inherit the test_lower method from UserValueTestCase because the checks are the same