]> Repositorios git - scryer-prolog.git/commitdiff
correct new copier bug
authorMark Thom <[email protected]>
Sun, 16 Sep 2018 16:57:14 +0000 (10:57 -0600)
committerMark Thom <[email protected]>
Sun, 16 Sep 2018 16:57:14 +0000 (10:57 -0600)
src/prolog/copier.rs
src/tests.rs

index 6b206abbe4339ae89e55a9880777fb73951b1428..2ee845c6ebb3a3a7f4e0a168479b0e3634b5fd3c 100644 (file)
@@ -84,7 +84,6 @@ pub(crate) trait CopierTarget
                             match rd.clone() {
                                 Addr::HeapCell(hc) if hc >= old_h => {
                                     self[threshold] = HeapCellValue::Addr(rd);
-                                    scan += 1;
                                 },
                                 addr @ Addr::HeapCell(..) | addr @ Addr::StackCell(..) => {
                                     if rd == addr {
@@ -92,8 +91,6 @@ pub(crate) trait CopierTarget
                                     } else {
                                         self[threshold] = HeapCellValue::Addr(addr);
                                     }
-
-                                    scan += 1;
                                 },
                                 _ => {
                                     trail.push((Ref::HeapCell(a), self[a].clone()));
index 01ba96ecdf3dfac4c194a8067fc7c448b9b0386e..c6f81babc6b9a621b32d85e9bc290e57174110f7 100644 (file)
@@ -1484,7 +1484,11 @@ fn test_queries_on_builtins()
     assert_prolog_failure!(&mut wam, "?- duplicate_term(g(X), f(X)).");
     assert_prolog_success!(&mut wam, "?- duplicate_term(f(X), f(X)).",
                            [["X = _1"]]);
-
+    assert_prolog_success!(&mut wam, "?- duplicate_term([[[[X, Y], Y], X]], Term).",
+                           [["Term = [[[[_22, _26], _26], _22]]", "X = _2", "Y = _0"]]);
+    assert_prolog_success!(&mut wam, "?- duplicate_term([X, [Y, [X]]], Term).",
+                           [["Term = [_12, [_16, [_12]]]", "X = _0", "Y = _4"]]);
+    
     // test duplicate_term on cyclic terms.
     assert_prolog_failure!(&mut wam, "?- X = g(X, Y), Y = f(X), duplicate_term(Y, g(Z)).");
     assert_prolog_success!(&mut wam, "?- X = g(X, Y), Y = f(X), duplicate_term(Y, f(Z)).",