clone in situ compiled terms

This commit is contained in:
Mark Thom
2019-01-19 17:05:29 -07:00
parent 18f0263d23
commit ca7e62928b
10 changed files with 76 additions and 77 deletions

View File

@@ -231,15 +231,15 @@ impl<'a> Allocator<'a> for DebrayAllocator
where Target: CompilationTarget<'a>
{
let r = cell.get();
let r = match lvl {
Level::Shallow => {
let k = self.arg_c;
if let GenContext::Last(chunk_num) = term_loc {
self.evacuate_arg(chunk_num, target);
}
self.arg_c += 1;
RegType::Temp(k)
},
@@ -247,7 +247,7 @@ impl<'a> Allocator<'a> for DebrayAllocator
_ => r
};
cell.set(r);
cell.set(r);
}
fn mark_var<Target>(&mut self, var: Rc<Var>, lvl: Level, cell: &'a Cell<VarReg>,
@@ -258,15 +258,14 @@ impl<'a> Allocator<'a> for DebrayAllocator
RegType::Temp(0) => {
// here, r is temporary *and* unassigned.
let o = self.alloc_reg_to_var(&var, lvl, term_loc, target);
cell.set(VarReg::Norm(RegType::Temp(o)));
(RegType::Temp(o), true)
},
RegType::Perm(0) => {
let pr = cell.get().norm();
self.record_register(var.clone(), pr);
(pr, true)
},
r => (r, false)