correct new copier bug
This commit is contained in:
@@ -84,7 +84,6 @@ pub(crate) trait CopierTarget
|
|||||||
match rd.clone() {
|
match rd.clone() {
|
||||||
Addr::HeapCell(hc) if hc >= old_h => {
|
Addr::HeapCell(hc) if hc >= old_h => {
|
||||||
self[threshold] = HeapCellValue::Addr(rd);
|
self[threshold] = HeapCellValue::Addr(rd);
|
||||||
scan += 1;
|
|
||||||
},
|
},
|
||||||
addr @ Addr::HeapCell(..) | addr @ Addr::StackCell(..) => {
|
addr @ Addr::HeapCell(..) | addr @ Addr::StackCell(..) => {
|
||||||
if rd == addr {
|
if rd == addr {
|
||||||
@@ -92,8 +91,6 @@ pub(crate) trait CopierTarget
|
|||||||
} else {
|
} else {
|
||||||
self[threshold] = HeapCellValue::Addr(addr);
|
self[threshold] = HeapCellValue::Addr(addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
scan += 1;
|
|
||||||
},
|
},
|
||||||
_ => {
|
_ => {
|
||||||
trail.push((Ref::HeapCell(a), self[a].clone()));
|
trail.push((Ref::HeapCell(a), self[a].clone()));
|
||||||
|
|||||||
@@ -1484,7 +1484,11 @@ fn test_queries_on_builtins()
|
|||||||
assert_prolog_failure!(&mut wam, "?- duplicate_term(g(X), f(X)).");
|
assert_prolog_failure!(&mut wam, "?- duplicate_term(g(X), f(X)).");
|
||||||
assert_prolog_success!(&mut wam, "?- duplicate_term(f(X), f(X)).",
|
assert_prolog_success!(&mut wam, "?- duplicate_term(f(X), f(X)).",
|
||||||
[["X = _1"]]);
|
[["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.
|
// 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_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)).",
|
assert_prolog_success!(&mut wam, "?- X = g(X, Y), Y = f(X), duplicate_term(Y, f(Z)).",
|
||||||
|
|||||||
Reference in New Issue
Block a user