Skip to content

Commit

Permalink
fix permanent variable handling over branches and cells (#2154)
Browse files Browse the repository at this point in the history
  • Loading branch information
Mark Thom committed Nov 11, 2023
1 parent 2dd1f6e commit 83b9c61
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 4 deletions.
9 changes: 8 additions & 1 deletion src/codegen.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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::*;
Expand Down Expand Up @@ -277,7 +278,6 @@ impl DebrayAllocator {
code: &mut CodeDeque,
) -> RegType {
self.mark_var::<QueryInstruction>(var_num, Level::Shallow, vr, term_loc, code);

vr.get().norm()
}

Expand All @@ -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)
}
Expand Down
5 changes: 2 additions & 3 deletions src/debray_allocator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,6 @@ impl DebrayAllocator {
}
}
_ => {
unreachable!();
}
}

Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -748,11 +747,11 @@ impl Allocator for DebrayAllocator {
RegType::Temp(0) => {
let o = self.alloc_reg_to_var::<Target>(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(_) => {
Expand Down

0 comments on commit 83b9c61

Please sign in to comment.