From: Mark Thom Date: Thu, 3 May 2018 03:52:34 +0000 (-0600) Subject: fix keysort error detection bugs X-Git-Tag: v0.8.110~479 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=d69bc4ed101b7447ba1d79958a1a28103d7dc82c;p=scryer-prolog.git fix keysort error detection bugs --- diff --git a/src/prolog/machine/machine_errors.rs b/src/prolog/machine/machine_errors.rs index 9fe771cd..11861291 100644 --- a/src/prolog/machine/machine_errors.rs +++ b/src/prolog/machine/machine_errors.rs @@ -56,10 +56,12 @@ impl MachineState { _ => { let mut addr = sorted; - while let Addr::Lis(mut l) = self.store(self.deref(addr)) { + while let Addr::Lis(l) = self.store(self.deref(addr)) { + let mut new_l = l; + loop { - match self.heap[l].clone() { - HeapCellValue::Addr(Addr::Str(new_l)) => l = new_l, + match self.heap[new_l].clone() { + HeapCellValue::Addr(Addr::Str(l)) => new_l = l, HeapCellValue::NamedStr(2, ref name, Some(Fixity::In)) if name.as_str() == "-" => break, HeapCellValue::Addr(Addr::HeapCell(_)) => break, @@ -69,7 +71,7 @@ impl MachineState { }; } - addr = Addr::HeapCell(l + 2); + addr = self.store(self.deref(Addr::HeapCell(l + 1))); } Ok(()) diff --git a/src/prolog/machine/machine_state_impl.rs b/src/prolog/machine/machine_state_impl.rs index e393470a..b6f0d1d3 100644 --- a/src/prolog/machine/machine_state_impl.rs +++ b/src/prolog/machine/machine_state_impl.rs @@ -1716,7 +1716,7 @@ impl MachineState { HeapCellValue::Addr(Addr::Con(Constant::EmptyList)) => break, hcv => - return Err(self.type_error(ValidType::List, hcv.as_addr(l))) + return Err(self.type_error(ValidType::List, a1)) }; }