compat.fhdl.structure: always order default case as the very last.
authorwhitequark <whitequark@whitequark.org>
Thu, 13 Jun 2019 03:52:04 +0000 (03:52 +0000)
committerwhitequark <whitequark@whitequark.org>
Thu, 13 Jun 2019 03:56:57 +0000 (03:56 +0000)
nmigen/compat/fhdl/structure.py

index c0cf3cf8f11f46d1ed1bacad490113fe2c98786f..a36086ec9d28e61dca0904be2754530aaf052d61 100644 (file)
@@ -79,6 +79,7 @@ class Case(ast.Switch):
                 "`with m.Case(): stmts`")
     def __init__(self, test, cases):
         new_cases = []
+        default   = None
         for k, v in cases.items():
             if isinstance(k, (bool, int)):
                 k = Const(k)
@@ -86,10 +87,13 @@ class Case(ast.Switch):
                     and not (isinstance(k, str) and k == "default")):
                 raise TypeError("Case object is not a Migen constant")
             if isinstance(k, str) and k == "default":
-                k = "-" * len(ast.Value.wrap(test))
+                default = v
             else:
                 k = k.value
             new_cases.append((k, v))
+        if default is not None:
+            k = "-" * len(ast.Value.wrap(test))
+            new_cases.append((k, default))
         super().__init__(test, OrderedDict(new_cases))
 
     @deprecated("instead of `Case(...).makedefault()`, use an explicit default case: "