From: Mark Thom Date: Sat, 2 Feb 2019 19:45:50 +0000 (-0700) Subject: record perm vars only while resident stack frame is still up X-Git-Tag: v0.8.110~280 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=a28c8934f3b7a29cdaab5d32e351dcb05db6bbff;p=scryer-prolog.git record perm vars only while resident stack frame is still up --- diff --git a/src/prolog/machine/mod.rs b/src/prolog/machine/mod.rs index a13cd773..c4ada3f1 100644 --- a/src/prolog/machine/mod.rs +++ b/src/prolog/machine/mod.rs @@ -592,13 +592,14 @@ impl MachineState { { for (var, var_data) in alloc_locs { match var_data { - &VarData::Perm(p) if p > 0 => { - let e = self.e; - let r = var_data.as_reg_type().reg_num(); - let addr = self.and_stack[e][r].clone(); + &VarData::Perm(p) if p > 0 => + if !heap_locs.contains_key(var) { + let e = self.e; + let r = var_data.as_reg_type().reg_num(); // crashes here. + let addr = self.and_stack[e][r].clone(); - heap_locs.insert(var.clone(), addr); - }, + heap_locs.insert(var.clone(), addr); + }, &VarData::Temp(cn, _, _) if cn == chunk_num => { let r = var_data.as_reg_type();