test: use `#nmigen:` magic comment instead of monkey patch.
authorwhitequark <whitequark@whitequark.org>
Sat, 26 Oct 2019 06:36:54 +0000 (06:36 +0000)
committerwhitequark <whitequark@whitequark.org>
Sat, 26 Oct 2019 06:37:08 +0000 (06:37 +0000)
Also, fix missing and incorrect src_loc_at arguments where
appropriate so the testsuite passes without warnings.

nmigen/hdl/mem.py
nmigen/hdl/xfrm.py
nmigen/test/__init__.py
nmigen/test/compat/test_coding.py
nmigen/test/test_build_res.py
nmigen/test/test_hdl_dsl.py
nmigen/test/test_hdl_ir.py
nmigen/test/test_hdl_mem.py
nmigen/test/test_hdl_xfrm.py
nmigen/test/test_lib_cdc.py
nmigen/test/test_lib_fifo.py

index 1205fa1045b560a51e115f9ce7b785f688f4e8fb..93d5d16096cdbc88dcd812f31dc351b9c52fa907 100644 (file)
@@ -53,11 +53,11 @@ class Memory:
             raise TypeError("Memory initialization value at address {:x}: {}"
                             .format(addr, e)) from None
 
-    def read_port(self, **kwargs):
-        return ReadPort(self, **kwargs)
+    def read_port(self, *, src_loc_at=0, **kwargs):
+        return ReadPort(self, src_loc_at=1 + src_loc_at, **kwargs)
 
-    def write_port(self, **kwargs):
-        return WritePort(self, **kwargs)
+    def write_port(self, *, src_loc_at=0, **kwargs):
+        return WritePort(self, src_loc_at=1 + src_loc_at, **kwargs)
 
     def __getitem__(self, index):
         """Simulation only."""
@@ -65,7 +65,7 @@ class Memory:
 
 
 class ReadPort(Elaboratable):
-    def __init__(self, memory, *, domain="sync", transparent=True):
+    def __init__(self, memory, *, domain="sync", transparent=True, src_loc_at=0):
         if domain == "comb" and not transparent:
             raise ValueError("Read port cannot be simultaneously asynchronous and non-transparent")
 
@@ -74,11 +74,12 @@ class ReadPort(Elaboratable):
         self.transparent = transparent
 
         self.addr = Signal(range(memory.depth),
-                           name="{}_r_addr".format(memory.name), src_loc_at=2)
+                           name="{}_r_addr".format(memory.name), src_loc_at=2 + src_loc_at)
         self.data = Signal(memory.width,
-                           name="{}_r_data".format(memory.name), src_loc_at=2)
+                           name="{}_r_data".format(memory.name), src_loc_at=2 + src_loc_at)
         if self.domain != "comb" and not transparent:
-            self.en = Signal(name="{}_r_en".format(memory.name), src_loc_at=2, reset=1)
+            self.en = Signal(name="{}_r_en".format(memory.name), reset=1,
+                             src_loc_at=2 + src_loc_at)
         else:
             self.en = Const(1)
 
@@ -132,7 +133,7 @@ class ReadPort(Elaboratable):
 
 
 class WritePort(Elaboratable):
-    def __init__(self, memory, *, domain="sync", granularity=None):
+    def __init__(self, memory, *, domain="sync", granularity=None, src_loc_at=0):
         if granularity is None:
             granularity = memory.width
         if not isinstance(granularity, int) or granularity < 0:
@@ -150,11 +151,11 @@ class WritePort(Elaboratable):
         self.granularity  = granularity
 
         self.addr = Signal(range(memory.depth),
-                           name="{}_w_addr".format(memory.name), src_loc_at=2)
+                           name="{}_w_addr".format(memory.name), src_loc_at=2 + src_loc_at)
         self.data = Signal(memory.width,
-                           name="{}_w_data".format(memory.name), src_loc_at=2)
+                           name="{}_w_data".format(memory.name), src_loc_at=2 + src_loc_at)
         self.en   = Signal(memory.width // granularity,
-                           name="{}_w_en".format(memory.name), src_loc_at=2)
+                           name="{}_w_en".format(memory.name), src_loc_at=2 + src_loc_at)
 
     def elaborate(self, platform):
         f = Instance("$memwr",
index 8cd69362a98bcea4a93e205f3ed542aa809d9126..23349d0ddf6b824fae2a0352585fa5355ed84082 100644 (file)
@@ -310,14 +310,14 @@ class FragmentTransformer:
         self.map_drivers(fragment, new_fragment)
         return new_fragment
 
-    def __call__(self, value):
+    def __call__(self, value, *, src_loc_at=0):
         if isinstance(value, Fragment):
             return self.on_fragment(value)
         elif isinstance(value, TransformedElaboratable):
             value._transforms_.append(self)
             return value
         elif hasattr(value, "elaborate"):
-            value = TransformedElaboratable(value)
+            value = TransformedElaboratable(value, src_loc_at=1 + src_loc_at)
             value._transforms_.append(self)
             return value
         else:
@@ -325,7 +325,7 @@ class FragmentTransformer:
 
 
 class TransformedElaboratable(Elaboratable):
-    def __init__(self, elaboratable):
+    def __init__(self, elaboratable, *, src_loc_at=0):
         assert hasattr(elaboratable, "elaborate")
 
         # Fields prefixed and suffixed with underscore to avoid as many conflicts with the inner
@@ -725,9 +725,9 @@ class _ControlInserter(FragmentTransformer):
     def _insert_control(self, fragment, domain, signals):
         raise NotImplementedError # :nocov:
 
-    def __call__(self, value):
-        self.src_loc = tracer.get_src_loc()
-        return super().__call__(value)
+    def __call__(self, value, *, src_loc_at=0):
+        self.src_loc = tracer.get_src_loc(src_loc_at=src_loc_at)
+        return super().__call__(value, src_loc_at=1 + src_loc_at)
 
 
 class ResetInserter(_ControlInserter):
index 724ad8a4812ac6c7f84477ddfd71386066545e3c..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
@@ -1,6 +0,0 @@
-from ..hdl.ir import Elaboratable
-
-
-# The nMigen testsuite creates a lot of elaboratables that are intentionally unused.
-# Disable the unused elaboratable check, as in our case it provides nothing but noise.
-del Elaboratable.__del__
index 5d945b34cb40ebc64c7cc5ae423622f516f1cd15..452a048b9d01f469c268fda8f054e325e7f6f543 100644 (file)
@@ -1,3 +1,5 @@
+# nmigen: UnusedElaboratable=no
+
 import unittest
 
 from ...compat import *
index 40f423582300da5fc1b9a3dd1eb944a8b6a01cc3..5f79fdbc0cee8fb52276d6990d872615c753a6be 100644 (file)
@@ -1,3 +1,5 @@
+# nmigen: UnusedElaboratable=no
+
 from .. import *
 from ..hdl.rec import *
 from ..lib.io import *
index 85d205c896b4cae3f2703e6484d189e8f6e40b3b..8ebd18dfa958a72a2d14c466db92a1156055e570 100644 (file)
@@ -1,3 +1,5 @@
+# nmigen: UnusedElaboratable=no
+
 from collections import OrderedDict
 from enum import Enum
 
index 6a85ebe075f92807345e2b194654bb4b585a4035..5c86b646f42bde3631aa9af6f01c7b55637ae312 100644 (file)
@@ -1,3 +1,5 @@
+# nmigen: UnusedElaboratable=no
+
 from collections import OrderedDict
 
 from ..hdl.ast import *
index 1a0a007931564fcaf01dd33bc14614e698411afe..e7fc232abe1f6cba1d5397a5f48d04be9fc37fe7 100644 (file)
@@ -1,3 +1,5 @@
+# nmigen: UnusedElaboratable=no
+
 from ..hdl.ast import *
 from ..hdl.mem import *
 from .utils import *
index c2e826aa3b6c86be90ac877a20e28634cc45ce60..e5f1745f1cd0a0e0117bedc1bb07f5eee716be53 100644 (file)
@@ -1,3 +1,5 @@
+# nmigen: UnusedElaboratable=no
+
 from ..hdl.ast import *
 from ..hdl.cd import *
 from ..hdl.ir import *
index 1a394ea65fbda30aeade45737956c37894f9ed7f..02403b6c53ffb4d8665de39b0ed36948ef0b3267 100644 (file)
@@ -1,3 +1,5 @@
+# nmigen: UnusedElaboratable=no
+
 from .utils import *
 from ..hdl import *
 from ..back.pysim import *
index 26c53910e50a0e9d44b9f9d14173c170cbff9300..7682bc997076ba87614a397b3f81d93368c17178 100644 (file)
@@ -1,3 +1,5 @@
+# nmigen: UnusedElaboratable=no
+
 from .utils import *
 from ..hdl import *
 from ..asserts import *