compat.fhdl.module: fix specials.
authorwhitequark <whitequark@whitequark.org>
Fri, 14 Dec 2018 16:14:08 +0000 (16:14 +0000)
committerwhitequark <whitequark@whitequark.org>
Fri, 14 Dec 2018 16:14:08 +0000 (16:14 +0000)
nmigen/compat/fhdl/module.py

index aa8d067db5e1dd597b316194df7022524304d33b..6d12e82850c42d883d596997682d866a0faeb250 100644 (file)
@@ -61,19 +61,19 @@ class _CompatModuleSync(_CompatModuleProxy):
 class _CompatModuleSpecials(_CompatModuleProxy):
     @deprecated("instead of `self.specials.<name> =`, use `m.submodules.<name> =`")
     def __setattr__(self, name, value):
-        self._cm._submodules += (name, value)
+        self._cm._specials.append((name, value))
         setattr(self._cm, name, value)
 
     @deprecated("instead of `self.specials +=`, use `m.submodules +=`")
     def __iadd__(self, other):
-        self._cm._submodules += [(None, e) for e in _flat_list(other)]
+        self._cm._specials += [(None, e) for e in _flat_list(other)]
         return self
 
 
 class _CompatModuleSubmodules(_CompatModuleProxy):
     @deprecated("instead of `self.submodules.<name> =`, use `m.submodules.<name> =`")
     def __setattr__(self, name, value):
-        self._cm._submodules += (name, value)
+        self._cm._submodules.append((name, value))
         setattr(self._cm, name, value)
 
     @deprecated("instead of `self.submodules +=`, use `m.submodules +=`")
@@ -122,6 +122,9 @@ class CompatModule:
         elif name == "_submodules":
             self._submodules = []
             return self._submodules
+        elif name == "_specials":
+            self._specials = []
+            return self._specials
         elif name == "_clock_domains":
             self._clock_domains = []
             return self._clock_domains
@@ -132,6 +135,10 @@ class CompatModule:
             raise AttributeError("'{}' object has no attribute '{}'"
                                  .format(type(self).__name__, name))
 
+    def _finalize_specials(self):
+        for name, special in self._specials:
+            self._module._add_submodule(special, name)
+
     def _finalize_submodules(self):
         for name, submodule in self._submodules:
             if not submodule.get_fragment_called: