From 4b71607215eefe15012fe5b7ae81ece79adca79d Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Mon, 31 Jan 2022 18:23:16 -0700 Subject: [PATCH] count cycle lengths in skip_max_list_cycle (#1260) --- src/machine/system_calls.rs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/machine/system_calls.rs b/src/machine/system_calls.rs index a9f1b91f..4f3ed651 100644 --- a/src/machine/system_calls.rs +++ b/src/machine/system_calls.rs @@ -462,12 +462,21 @@ impl MachineState { hare = step(&self.heap, self.heap[hare]); } + let mut count = 1; + while hare != tortoise { hare = step(&self.heap, self.heap[hare]); tortoise = step(&self.heap, self.heap[tortoise]); + + count += 1; } - unify!(self, self.registers[4], self.heap[hare]); + let target_n = self.store(self.deref(self.registers[1])); + self.unify_fixnum(Fixnum::build_with(count), target_n); + + if !self.fail { + unify!(self, self.registers[4], self.heap[hare]); + } } fn finalize_skip_max_list(&mut self, n: i64, value: HeapCellValue) { -- 2.54.0