From 3a6aee72a3dd0084b08d0b30d15d5bc3a05907a2 Mon Sep 17 00:00:00 2001 From: Mark Date: Sun, 15 Oct 2023 01:28:42 -0600 Subject: [PATCH] correct is_cyclic again for non-variable ref cells (#2116) --- src/machine/gc.rs | 4 +++- src/tests/acyclic_term.pl | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/machine/gc.rs b/src/machine/gc.rs index 7958cf67..25f30a00 100644 --- a/src/machine/gc.rs +++ b/src/machine/gc.rs @@ -273,8 +273,10 @@ impl<'a, UMP: UnmarkPolicy> StacklessPreOrderHeapIter<'a, UMP> { fn is_cyclic(&self, var_current: usize, var_next: usize) -> bool { if self.heap[var_next].is_var() { !self.heap[var_next].get_forwarding_bit() && var_current != var_next + } else if self.heap[var_next].is_ref() { + self.heap[var_next].get_mark_bit() } else { - self.heap[var_next].is_ref() + false } } diff --git a/src/tests/acyclic_term.pl b/src/tests/acyclic_term.pl index fd8ad229..cbbf2466 100644 --- a/src/tests/acyclic_term.pl +++ b/src/tests/acyclic_term.pl @@ -173,6 +173,10 @@ test("acyclic_term#2114", ( A=B*B, acyclic_term(A) )). +test("acyclic_term#2116", ( + A=B*B,B=[]*[], acyclic_term(A) +)). + main :- findall(test(Name, Goal), test(Name, Goal), Tests), run_tests(Tests, Failed), -- 2.54.0