hdl.ast: Value.matches()
with no arguments should return C(1)
.
The behavior of the following must be always the same: - `with m.Switch(v): with m.Case(*pats):` - `with m.If(v.matches(*pats)):`
This commit is contained in:
parent
9aeb22311f
commit
ef2e9fa809
|
@ -442,7 +442,7 @@ class Value(metaclass=ABCMeta):
|
|||
continue
|
||||
matches.append(self == pattern)
|
||||
if not matches:
|
||||
return Const(0)
|
||||
return Const(1)
|
||||
elif len(matches) == 1:
|
||||
return matches[0]
|
||||
else:
|
||||
|
|
|
@ -34,6 +34,7 @@ Language changes
|
|||
* Added: :meth:`Value.matches` and ``with m.Case():`` accept any constant-castable objects. (`RFC 4`_)
|
||||
* Changed: :meth:`Value.cast` casts :class:`ValueCastable` objects recursively.
|
||||
* Changed: :meth:`Value.cast` treats instances of classes derived from both :class:`enum.Enum` and :class:`int` (including :class:`enum.IntEnum`) as enumerations rather than integers.
|
||||
* Changed: ``Value.matches()`` with an empty list of patterns returns ``Const(1)`` rather than ``Const(0)``, to match ``with m.Case():``.
|
||||
* Changed: :class:`Cat` accepts instances of classes derived from both :class:`enum.Enum` and :class:`int` (including :class:`enum.IntEnum`) without warning.
|
||||
* Deprecated: :meth:`Const.normalize`. (`RFC 5`_)
|
||||
* Removed: (deprecated in 0.1) casting of :class:`Shape` to and from a ``(width, signed)`` tuple.
|
||||
|
|
|
@ -599,7 +599,7 @@ class OperatorTestCase(FHDLTestCase):
|
|||
|
||||
def test_matches(self):
|
||||
s = Signal(4)
|
||||
self.assertRepr(s.matches(), "(const 1'd0)")
|
||||
self.assertRepr(s.matches(), "(const 1'd1)")
|
||||
self.assertRepr(s.matches(1), """
|
||||
(== (sig s) (const 1'd1))
|
||||
""")
|
||||
|
|
Loading…
Reference in a new issue