tracer: factor out get_var_name(default=).
authorwhitequark <whitequark@whitequark.org>
Fri, 15 Feb 2019 14:15:02 +0000 (14:15 +0000)
committerwhitequark <whitequark@whitequark.org>
Sun, 3 Mar 2019 18:21:22 +0000 (18:21 +0000)
nmigen/hdl/ast.py
nmigen/hdl/mem.py
nmigen/hdl/rec.py
nmigen/tracer.py

index 3dd8809542b25dd8f140e2782cee4e95308d7cac..e7fc288134ff40b9d3f30249a95c6878af429fe9 100644 (file)
@@ -581,12 +581,7 @@ class Signal(Value, DUID):
                  attrs=None, decoder=None, src_loc_at=0):
         super().__init__(src_loc_at=src_loc_at)
 
-        if name is None:
-            try:
-                name = tracer.get_var_name(depth=2 + src_loc_at)
-            except tracer.NameNotFound:
-                name = "$signal"
-        self.name = name
+        self.name = name or tracer.get_var_name(depth=2 + src_loc_at, default="$signal")
 
         if shape is None:
             if min is None:
@@ -625,12 +620,8 @@ class Signal(Value, DUID):
         other : Value
             Object to base this Signal on.
         """
-        if name is None:
-            try:
-                name = tracer.get_var_name(depth=2 + src_loc_at)
-            except tracer.NameNotFound:
-                name = "$like"
-        kw = dict(shape=cls.wrap(other).shape(), name=name)
+        name = name or tracer.get_var_name(depth=2 + src_loc_at, default="$like")
+        kw   = dict(shape=cls.wrap(other).shape(), name=name)
         if isinstance(other, cls):
             kw.update(reset=other.reset, reset_less=other.reset_less,
                       attrs=other.attrs, decoder=other.decoder)
index 0d86ac4641d2e8512677c8893386156a316f25ba..bef80350405a911a317012613eaaaa568cda777b 100644 (file)
@@ -15,12 +15,7 @@ class Memory:
             raise TypeError("Memory depth must be a non-negative integer, not '{!r}'"
                             .format(depth))
 
-        if name is None:
-            try:
-                name = tracer.get_var_name(depth=2)
-            except tracer.NameNotFound:
-                name = "$memory"
-        self.name    = name
+        self.name    = name or tracer.get_var_name(depth=2, default="$memory")
         self.src_loc = tracer.get_src_loc()
 
         self.width = width
@@ -194,10 +189,7 @@ class DummyPort:
         if granularity is None:
             granularity = width
         if name is None:
-            try:
-                name = tracer.get_var_name(depth=2)
-            except tracer.NameNotFound:
-                name = "dummy"
+            name = tracer.get_var_name(depth=2, default="dummy")
 
         self.addr = Signal(addr_bits,
                            name="{}_addr".format(name))
index 0b06f7523c271e42d6b21643e9ce7b8e27289e8f..999c85bcbac862104c5096ec2940ab5655ba9e6b 100644 (file)
@@ -64,10 +64,8 @@ class Layout:
 class Record(Value):
     def __init__(self, layout, name=None):
         if name is None:
-            try:
-                name = tracer.get_var_name()
-            except tracer.NameNotFound:
-                pass
+            name = tracer.get_var_name(default=None)
+
         self.name    = name
         self.src_loc = tracer.get_src_loc()
 
index 225ee1ac6e2061b165569fc109c6fa5cfbb9e0bd..49c965048e3848a13462ff96d21a9f9b1e26963f 100644 (file)
@@ -10,7 +10,10 @@ class NameNotFound(Exception):
     pass
 
 
-def get_var_name(depth=2):
+_raise_exception = object()
+
+
+def get_var_name(depth=2, default=_raise_exception):
     frame = inspect.currentframe()
     for _ in range(depth):
         frame = frame.f_back
@@ -37,7 +40,10 @@ def get_var_name(depth=2):
                      "DUP_TOP", "BUILD_LIST"):
             index += 2
         else:
-            raise NameNotFound
+            if default is _raise_exception:
+                raise NameNotFound
+            else:
+                return default
 
 
 def get_src_loc(src_loc_at=0):