free local cut variables after cut

This commit is contained in:
Mark
2023-06-23 12:24:34 -06:00
parent 4ad113a6f8
commit 92853a6a12
2 changed files with 36 additions and 15 deletions

View File

@@ -332,7 +332,7 @@ trait AddToFreeList<'a, Target: CompilationTarget<'a>> {
impl<'a, 'b> AddToFreeList<'a, FactInstruction> for CodeGenerator<'b> {
fn add_term_to_free_list(&mut self, r: RegType) {
self.marker.add_to_free_list(r);
self.marker.add_reg_to_free_list(r);
}
fn add_subterm_to_free_list(&mut self, _term: &Term) {}
@@ -345,7 +345,7 @@ impl<'a, 'b> AddToFreeList<'a, QueryInstruction> for CodeGenerator<'b> {
#[inline(always)]
fn add_subterm_to_free_list(&mut self, term: &Term) {
if let Some(cell) = structure_cell(term) {
self.marker.add_to_free_list(cell.get());
self.marker.add_reg_to_free_list(cell.get());
}
}
}
@@ -881,7 +881,6 @@ impl<'b> CodeGenerator<'b> {
code.push_back(instr!("neck_cut"));
} else {
let r = self.marker.get_binding(var_num);
// let r = self.marker.mark_cut_var(var_num, chunk_num);
code.push_back(instr!("cut", r));
}
@@ -896,7 +895,6 @@ impl<'b> CodeGenerator<'b> {
&QueryTerm::LocalCut(var_num) => {
let code = branch_code_stack.code(code);
let r = self.marker.get_binding(var_num);
// let r = self.marker.mark_cut_var(var_num, chunk_num);
code.push_back(instr!("cut", r));
if self.marker.in_tail_position {
@@ -905,6 +903,8 @@ impl<'b> CodeGenerator<'b> {
}
code.push_back(instr!("proceed"));
} else {
self.marker.free_cut_var(chunk_num, var_num);
}
}
&QueryTerm::Clause(