fix allocator bug.

This commit is contained in:
Mark Thom
2018-02-11 15:21:30 -07:00
parent 54e36f0d24
commit 47055d189d
4 changed files with 15 additions and 35 deletions

View File

@@ -18,7 +18,6 @@ pub trait Allocator<'a>
fn reset(&mut self);
fn reset_contents(&mut self) {}
fn reset_arg(&mut self, usize);
fn reset_arg_at_head(&mut self, &'a Term);
fn advance_arg(&mut self);

View File

@@ -574,7 +574,7 @@ impl<'a, TermMarker: Allocator<'a>> CodeGenerator<'a, TermMarker>
let mut code = Vec::new();
if let &QueryTerm::Term(ref term) = p0 {
self.marker.reset_arg_at_head(term);
self.marker.reset_arg(term.arity());
self.compile_seq_prelude(&conjunct_info, &mut code);
if let &Term::Clause(..) = term {
@@ -586,8 +586,6 @@ impl<'a, TermMarker: Allocator<'a>> CodeGenerator<'a, TermMarker>
}
}
// self.marker.reset_arg_at_head(term);
let iter = ChunkedIterator::from_rule_body(p1, clauses);
try!(self.compile_seq(iter, &conjunct_info, &mut code, false));

View File

@@ -273,11 +273,9 @@ impl<'a> Allocator<'a> for DebrayAllocator<'a>
Level::Shallow => {
let k = self.arg_c;
if !r.is_perm() {
if self.is_curr_arg_distinct_from(var) {
self.evacuate_arg(term_loc.chunk_num(), target);
}
}
self.arg_c += 1;
@@ -345,19 +343,4 @@ impl<'a> Allocator<'a> for DebrayAllocator<'a>
self.arg_c = 1;
self.temp_lb = arity + 1;
}
fn reset_arg_at_head(&mut self, term: &'a Term) {
self.arg_c = 1;
self.temp_lb = term.arity() + 1;
match term {
&Term::Clause(_, _, ref subterms, _) =>
for (idx, tr) in subterms.iter().enumerate() {
if let &Term::Var(_, _) = tr.as_ref() {
self.in_use.insert(idx + 1);
}
},
_ => {}
};
}
}