diff --git a/src/codegen.rs b/src/codegen.rs index ae4756836..21fd4e4d1 100644 --- a/src/codegen.rs +++ b/src/codegen.rs @@ -10,6 +10,7 @@ use crate::parser::ast::*; use crate::targets::*; use crate::temp_v; use crate::types::*; +use crate::variable_records::*; use crate::instr; use crate::machine::disjuncts::*; @@ -277,7 +278,6 @@ impl DebrayAllocator { code: &mut CodeDeque, ) -> RegType { self.mark_var::(var_num, Level::Shallow, vr, term_loc, code); - vr.get().norm() } @@ -296,6 +296,13 @@ impl DebrayAllocator { self.mark_var_in_non_callable(var_num, term_loc, vr, code); temp_v!(arg) } else { + match &self.var_data.records[var_num].allocation { + VarAlloc::Perm(_, PermVarAllocation::Pending) => { + self.mark_var_in_non_callable(var_num, term_loc, vr, code); + } + _ => {} + } + self.increment_running_count(var_num); RegType::Perm(p) } diff --git a/src/debray_allocator.rs b/src/debray_allocator.rs index 01ec4da79..89ef44f3d 100644 --- a/src/debray_allocator.rs +++ b/src/debray_allocator.rs @@ -189,7 +189,6 @@ impl DebrayAllocator { } } _ => { - unreachable!(); } } @@ -474,7 +473,7 @@ impl DebrayAllocator { #[inline(always)] pub fn get_binding(&self, var_num: usize) -> RegType { - self.var_data.records[var_num].allocation.as_reg_type() + self.var_data.records[var_num].allocation.as_reg_type() } pub fn num_perm_vars(&self) -> usize { @@ -748,11 +747,11 @@ impl Allocator for DebrayAllocator { RegType::Temp(0) => { let o = self.alloc_reg_to_var::(var_num, lvl, term_loc, code); cell.set(VarReg::Norm(RegType::Temp(o))); - (RegType::Temp(o), true) } RegType::Perm(0) => { let p = self.alloc_perm_var(var_num, term_loc.chunk_num()); + cell.set(VarReg::Norm(RegType::Perm(p))); (RegType::Perm(p), true) } r @ RegType::Perm(_) => {