.format(pattern, len(switch_data["test"])),
SyntaxWarning, stacklevel=3)
continue
+ if isinstance(pattern, Enum) and bits_for(pattern.value) > len(switch_data["test"]):
+ warnings.warn("Case pattern '{:b}' ({}.{}) is wider than switch value "
+ "(which has width {}); comparison will never be true"
+ .format(pattern.value, pattern.__class__.__name__, pattern.name,
+ len(switch_data["test"])),
+ SyntaxWarning, stacklevel=3)
+ continue
new_patterns = (*new_patterns, pattern)
try:
_outer_case, self._statements = self._statements, []
""")
def test_Case_width_wrong(self):
+ class Color(Enum):
+ RED = 0b10101010
m = Module()
with m.Switch(self.w1):
with self.assertRaises(SyntaxError,
"comparison will never be true"):
with m.Case(0b10110):
pass
+ with self.assertWarns(SyntaxWarning,
+ msg="Case pattern '10101010' (Color.RED) is wider than switch value "
+ "(which has width 4); comparison will never be true"):
+ with m.Case(Color.RED):
+ pass
self.assertRepr(m._statements, """
(
(switch (sig w1) )