compat.fhdl.structure: only convert to bool in If/Elif if necessary.
authorwhitequark <cz@m-labs.hk>
Sun, 16 Dec 2018 17:41:42 +0000 (17:41 +0000)
committerwhitequark <cz@m-labs.hk>
Sun, 16 Dec 2018 17:41:42 +0000 (17:41 +0000)
nmigen/compat/fhdl/structure.py

index 1743df2d70a3f4d4478c0255d5e11268c2dd8d81..c00f033c83d7be7185381384bb6636a0a395ac52 100644 (file)
@@ -30,12 +30,16 @@ def Constant(value, bits_sign=None):
 class If(ast.Switch):
     @deprecated("instead of `If(cond, ...)`, use `with m.If(cond): ...`")
     def __init__(self, cond, *stmts):
-        cond = Value.wrap(cond).bool()
+        cond = Value.wrap(cond)
+        if len(cond) != 1:
+            cond = cond.bool()
         super().__init__(cond, {"1": ast.Statement.wrap(stmts)})
 
     @deprecated("instead of `.Elif(cond, ...)`, use `with m.Elif(cond): ...`")
     def Elif(self, cond, *stmts):
-        cond = Value.wrap(cond).bool()
+        cond = Value.wrap(cond)
+        if len(cond) != 1:
+            cond = cond.bool()
         self.cases = OrderedDict(("-" + k, v) for k, v in self.cases.items())
         self.cases["1" + "-" * len(self.test)] = ast.Statement.wrap(stmts)
         self.test = Cat(self.test, cond)