Skip to content

Commit 74a4096

Browse files
wanda-phiwhitequark
authored andcommitted
sim: fix infinite recursion on non-Signal values.
1 parent 77e9bf3 commit 74a4096

File tree

2 files changed

+12
-10
lines changed

2 files changed

+12
-10
lines changed

amaranth/sim/pysim.py

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -269,24 +269,22 @@ def close(self, timestamp):
269269
self.gtkw_save.treeopen("top")
270270

271271
def traverse_traces(traces):
272-
if isinstance(traces, Signal):
273-
for name in self.gtkw_signal_names[traces]:
274-
self.gtkw_save.trace(name)
275-
elif isinstance(traces, data.View):
272+
if isinstance(traces, data.View):
276273
with self.gtkw_save.group("view"):
277-
trace = Value.cast(traces)
274+
traverse_traces(Value.cast(traces))
275+
elif isinstance(traces, ValueLike):
276+
trace = Value.cast(traces)
277+
if isinstance(traces, MemoryData._Row):
278+
for name in self.gtkw_memory_names[traces._memory][traces._index]:
279+
self.gtkw_save.trace(name)
280+
else:
278281
for trace_signal in trace._rhs_signals():
279282
for name in self.gtkw_signal_names[trace_signal]:
280283
self.gtkw_save.trace(name)
281-
elif isinstance(traces, ValueLike):
282-
traverse_traces(Value.cast(traces))
283284
elif isinstance(traces, MemoryData):
284285
for row_names in self.gtkw_memory_names[traces]:
285286
for name in row_names:
286287
self.gtkw_save.trace(name)
287-
elif isinstance(traces, MemoryData._Row):
288-
for name in self.gtkw_memory_names[traces._memory][traces._index]:
289-
self.gtkw_save.trace(name)
290288
elif hasattr(traces, "signature") and isinstance(traces.signature, wiring.Signature):
291289
with self.gtkw_save.group("interface"):
292290
for _, _, member in traces.signature.flatten(traces):

tests/test_sim.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1468,6 +1468,10 @@ def test_signal(self):
14681468
a = Signal()
14691469
self.assertDef(a, [a])
14701470

1471+
def test_expr(self):
1472+
a = Signal()
1473+
self.assertDef(a + 3, [a])
1474+
14711475
def test_list(self):
14721476
a = Signal()
14731477
self.assertDef([a], [a])

0 commit comments

Comments
 (0)