]> Repositorios git - scryer-prolog.git/commitdiff
fix copy_partial_string bug (#572)
authorMark Thom <[email protected]>
Wed, 17 Jun 2020 00:47:39 +0000 (18:47 -0600)
committerMark Thom <[email protected]>
Wed, 17 Jun 2020 00:47:39 +0000 (18:47 -0600)
src/lib/tabling/trie.pl
src/machine/copier.rs

index 18e77d9f3ac50997a099a0b5acbb04f66fdda435..2e545524b4a6504fec06f5f9aa2fa5839ba4ea5e 100644 (file)
@@ -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],
index 588b68a568ad9b5a09a50f8049403623668b5985..ba2eff535d5c56cd21ef0c8cef158f1a9a2a3527 100644 (file)
@@ -104,7 +104,7 @@ impl<T: CopierTarget> CopyTermState<T> {
     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<T: CopierTarget> CopyTermState<T> {
         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<T: CopierTarget> CopyTermState<T> {
 
         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],