From 0ef8dc03acaf71c044e8f4aa4e15917c79adfa22 Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Sun, 9 Apr 2017 19:46:44 -0600 Subject: [PATCH] adjust register allocation around cut --- src/prolog/codegen.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/prolog/codegen.rs b/src/prolog/codegen.rs index d2ed6a7a..dab093da 100644 --- a/src/prolog/codegen.rs +++ b/src/prolog/codegen.rs @@ -729,7 +729,7 @@ impl<'a> CodeGenerator<'a> { } } - fn set_perm_vals(vs: &VariableFixtures) { + fn set_perm_vals(vs: &VariableFixtures, offset: usize) { let mut values_vec : Vec<_> = vs.values() .map(|ref v| (v.0, &v.1)) .collect(); @@ -744,7 +744,7 @@ impl<'a> CodeGenerator<'a> { for (i, v) in values_vec.into_iter().rev().enumerate() { if let VarStatus::Permanent(_) = v.0 { for cell in v.1 { - cell.set(VarReg::Norm(RegType::Perm(i + 1))); + cell.set(VarReg::Norm(RegType::Perm(i + 1 + offset))); } } else { break; @@ -783,7 +783,7 @@ impl<'a> CodeGenerator<'a> { } } - Self::set_perm_vals(&vs); + Self::set_perm_vals(&vs, deep_cuts as usize); (vs, deep_cuts) } @@ -887,7 +887,7 @@ impl<'a> CodeGenerator<'a> { let (vs, deep_cuts) = Self::mark_perm_vars(&rule); let &Rule { head: (ref p0, ref p1), ref clauses } = rule; - let perm_vars = Self::vars_above_threshold(&vs, 0); + let perm_vars = Self::vars_above_threshold(&vs, 0) + deep_cuts as usize; let mut body = Vec::new(); if clauses.len() > 0 { -- 2.54.0