From: Mark Thom Date: Wed, 4 Dec 2019 05:01:38 +0000 (-0700) Subject: fix copy_term/3 infinite looping on cyclic terms X-Git-Tag: v0.8.118~36^2~5 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=738ea59e2367b1f24233fa1897554fecbbbcf185;p=scryer-prolog.git fix copy_term/3 infinite looping on cyclic terms --- diff --git a/src/prolog/machine/copier.rs b/src/prolog/machine/copier.rs index 51a56dd2..13e21ee3 100644 --- a/src/prolog/machine/copier.rs +++ b/src/prolog/machine/copier.rs @@ -90,6 +90,11 @@ impl CopyTermState { ra @ Addr::AttrVar(_) | ra @ Addr::HeapCell(..) | ra @ Addr::StackCell(..) => { if ra == rd { self.reinstantiate_var(ra, threshold); + + if let AttrVarPolicy::StripAttributes = self.attr_var_policy { + self.trail.push((Ref::HeapCell(addr), self.target[addr].clone())); + self.target[addr] = HeapCellValue::Addr(Addr::HeapCell(threshold)); + } } else { self.target[threshold] = HeapCellValue::Addr(ra); }