Module._check_signed_cond() performs a Value.cast (now self._AstType.cast)
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sat, 2 Oct 2021 15:28:28 +0000 (16:28 +0100)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sat, 2 Oct 2021 15:28:28 +0000 (16:28 +0100)
in each instance it is used (for m.If and m.Elif).  therefore, why not
move the bool check-and-convert *into* Module._check_signed_cond()

nmigen/hdl/dsl.py

index 90c29766a3cc6ddf12afd5cf3d18719d5e77c9c3..982b3a574fd4aad475878b0ff9a927f11dae5a07 100644 (file)
@@ -181,6 +181,7 @@ class Module(_ModuleBuilderRoot, Elaboratable):
         # to complete the Type 1 (ast.*) nmigen language construct abstraction
         # from Type 2 (Module - this class) Module must be told what AST type
         # it may cast m.If/Elif conditions and m.Switch
+        self._astType      = _astType or Value
 
     def _check_context(self, construct, context):
         if self._ctrl_context != context:
@@ -221,6 +222,10 @@ class Module(_ModuleBuilderRoot, Elaboratable):
                           "Replace `~flag` with `not flag`. (If this is a false positive, "
                           "silence this warning with `m.If(x)` → `m.If(x.bool())`.)",
                           SyntaxWarning, stacklevel=4)
+        # check if the condition is not considered boolean, and only
+        # convert it if it is not
+        if not cond.considered_bool():
+            cond = cond.bool()
         return cond
 
     @_guardedcontextmanager("If")