Skip to content

Commit d805f96

Browse files
rroohhhwhitequark
authored andcommitted
hdl._ir: chain Fragment.origins with preexisting
By chaining, `Fragment.origins` gets tracked through `FragmentTransformer`s
1 parent 7dcbb9e commit d805f96

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
@@ -968,12 +968,31 @@ def test_origins(self):
968968
self.assertIs(frag.origins[1], elab2)
969969
self.assertIs(frag.origins[2], m)
970970

971+
def test_origins_transformed_elaboratable(self):
972+
renamed = DomainRenamer("sync")(elab1 := ElaboratesTo(elab2 := ElaboratesTo(m := Module())))
973+
frag = Fragment.get(renamed, platform=None)
974+
self.assertEqual(len(frag.origins), 4)
975+
self.assertIsInstance(frag.origins, tuple)
976+
self.assertIs(frag.origins[0], renamed)
977+
self.assertIs(frag.origins[1], elab1)
978+
self.assertIs(frag.origins[2], elab2)
979+
self.assertIs(frag.origins[3], m)
980+
981+
renamed_nested = ElaboratesTo(elab2 := ElaboratesTo(renamed := DomainRenamer("sync")(m := Module())))
982+
frag = Fragment.get(renamed_nested, platform=None)
983+
self.assertEqual(len(frag.origins), 4)
984+
self.assertIsInstance(frag.origins, tuple)
985+
self.assertIs(frag.origins[0], renamed_nested)
986+
self.assertIs(frag.origins[1], elab2)
987+
self.assertIs(frag.origins[2], renamed)
988+
self.assertIs(frag.origins[3], m)
989+
971990
def test_origins_disable(self):
972991
inst = Instance("test")
973992
del inst.origins
974993
elab = ElaboratesTo(inst)
975994
frag = Fragment.get(elab, platform=None)
976-
self.assertFalse(hasattr(frag, "_origins"))
995+
self.assertFalse(hasattr(frag, "origins"))
977996

978997

979998
class IOBufferTestCase(FHDLTestCase):

0 commit comments

Comments
 (0)