Skip to content

Commit 7905669

Browse files
rroohhhwhitequark
authored andcommitted
hdl._ir: chain Fragment.origins with preexisting [0.5 backport]
By chaining, `Fragment.origins` gets tracked through `FragmentTransformer`s
1 parent a96cd85 commit 7905669

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

amaranth/hdl/_ir.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ def get(obj, platform):
5454
while True:
5555
if isinstance(obj, Fragment):
5656
if hasattr(obj, "origins"):
57-
obj.origins = tuple(origins)
57+
obj.origins = tuple(origins) + (obj.origins or ())
5858
return obj
5959
elif isinstance(obj, Elaboratable):
6060
code = obj.elaborate.__code__

tests/test_hdl_ir.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1079,12 +1079,31 @@ def test_origins(self):
10791079
self.assertIs(frag.origins[1], elab2)
10801080
self.assertIs(frag.origins[2], m)
10811081

1082+
def test_origins_transformed_elaboratable(self):
1083+
renamed = DomainRenamer("sync")(elab1 := ElaboratesTo(elab2 := ElaboratesTo(m := Module())))
1084+
frag = Fragment.get(renamed, platform=None)
1085+
self.assertEqual(len(frag.origins), 4)
1086+
self.assertIsInstance(frag.origins, tuple)
1087+
self.assertIs(frag.origins[0], renamed)
1088+
self.assertIs(frag.origins[1], elab1)
1089+
self.assertIs(frag.origins[2], elab2)
1090+
self.assertIs(frag.origins[3], m)
1091+
1092+
renamed_nested = ElaboratesTo(elab2 := ElaboratesTo(renamed := DomainRenamer("sync")(m := Module())))
1093+
frag = Fragment.get(renamed_nested, platform=None)
1094+
self.assertEqual(len(frag.origins), 4)
1095+
self.assertIsInstance(frag.origins, tuple)
1096+
self.assertIs(frag.origins[0], renamed_nested)
1097+
self.assertIs(frag.origins[1], elab2)
1098+
self.assertIs(frag.origins[2], renamed)
1099+
self.assertIs(frag.origins[3], m)
1100+
10821101
def test_origins_disable(self):
10831102
inst = Instance("test")
10841103
del inst.origins
10851104
elab = ElaboratesTo(inst)
10861105
frag = Fragment.get(elab, platform=None)
1087-
self.assertFalse(hasattr(frag, "_origins"))
1106+
self.assertFalse(hasattr(frag, "origins"))
10881107

10891108

10901109
class IOBufferTestCase(FHDLTestCase):

0 commit comments

Comments
 (0)