From: Mark Thom Date: Wed, 17 Jun 2020 00:47:39 +0000 (-0600) Subject: fix copy_partial_string bug (#572) X-Git-Tag: v0.8.127~32 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=53f99ca434ebdc5dbdfcff31044d977980ef7998;p=scryer-prolog.git fix copy_partial_string bug (#572) --- diff --git a/src/lib/tabling/trie.pl b/src/lib/tabling/trie.pl index 18e77d9f..2e545524 100644 --- a/src/lib/tabling/trie.pl +++ b/src/lib/tabling/trie.pl @@ -66,7 +66,7 @@ % p_trie_arity_univ(+Term,-FunctorData,-ArgumentsList). p_trie_arity_univ(Term,functor_data(Name,Arity),Arguments) :- ( var(Term) -> - Name = var, + Name = Term, Arity = 0, Arguments = [] ; Term =.. [Name|Arguments], diff --git a/src/machine/copier.rs b/src/machine/copier.rs index 588b68a5..ba2eff53 100644 --- a/src/machine/copier.rs +++ b/src/machine/copier.rs @@ -104,7 +104,7 @@ impl CopyTermState { fn copy_partial_string(&mut self, addr: usize, n: usize) { if let &HeapCellValue::Addr(Addr::PStrLocation(h, _)) = &self.target[addr] { if h >= self.old_h { - *self.value_at_scan() = HeapCellValue::Addr(Addr::PStrLocation(h, 0)); + *self.value_at_scan() = HeapCellValue::Addr(Addr::PStrLocation(h, n)); self.scan += 1; return; @@ -114,14 +114,14 @@ impl CopyTermState { let threshold = self.target.threshold(); *self.value_at_scan() = - HeapCellValue::Addr(Addr::PStrLocation(threshold, 0)); + HeapCellValue::Addr(Addr::PStrLocation(threshold, n)); self.scan += 1; let (pstr, has_tail) = match &self.target[addr] { &HeapCellValue::PartialString(ref pstr, has_tail) => { - (pstr.clone_from_offset(n), has_tail) + (pstr.clone_from_offset(0), has_tail) } _ => { unreachable!() @@ -130,7 +130,7 @@ impl CopyTermState { self.target.push(HeapCellValue::PartialString(pstr, has_tail)); - let replacement = HeapCellValue::Addr(Addr::PStrLocation(threshold, 0)); + let replacement = HeapCellValue::Addr(Addr::PStrLocation(threshold, n)); let trail_item = mem::replace( &mut self.target[addr],