hdl.rec: include record name in error message.
authorwhitequark <cz@m-labs.hk>
Tue, 1 Jan 2019 03:39:12 +0000 (03:39 +0000)
committerwhitequark <cz@m-labs.hk>
Tue, 1 Jan 2019 03:39:12 +0000 (03:39 +0000)
nmigen/hdl/rec.py
nmigen/test/test_hdl_rec.py

index f291087a7ef5279819903e5bedfd8a3b9facedd0..ef2fcb6a1f006e2ae18fcfad4a42a16821bdf961 100644 (file)
@@ -93,8 +93,12 @@ class Record(Value):
         try:
             return self.fields[name]
         except KeyError:
-            raise NameError("Record does not have a field '{}'. Did you mean one of: {}?"
-                            .format(name, ", ".join(self.fields))) from None
+            if self.name is None:
+                reference = "Unnamed record"
+            else:
+                reference = "Record '{}'".format(self.name)
+            raise NameError("{} does not have a field '{}'. Did you mean one of: {}?"
+                            .format(reference, name, ", ".join(self.fields))) from None
 
     def shape(self):
         return sum(len(f) for f in self.fields.values()), False
index dd5cb7be8aa980b993c97376303babaa17858a93..3f68247176336a3fd547ad5c1f3d8747ffe041ea 100644 (file)
@@ -85,5 +85,14 @@ class RecordTestCase(FHDLTestCase):
             ("ack", 1),
         ])
         with self.assertRaises(NameError,
-                msg="Record does not have a field 'en'. Did you mean one of: stb, ack?"):
+                msg="Record 'r' does not have a field 'en'. Did you mean one of: stb, ack?"):
+            r.en
+
+    def test_wrong_field_unnamed(self):
+        r = [Record([
+            ("stb", 1),
+            ("ack", 1),
+        ])][0]
+        with self.assertRaises(NameError,
+                msg="Unnamed record does not have a field 'en'. Did you mean one of: stb, ack?"):
             r.en