From: Mark Date: Sun, 15 Oct 2023 07:28:42 +0000 (-0600) Subject: correct is_cyclic again for non-variable ref cells (#2116) X-Git-Tag: remove~19 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=3a6aee72a3dd0084b08d0b30d15d5bc3a05907a2;p=scryer-prolog.git correct is_cyclic again for non-variable ref cells (#2116) --- 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),