remove QueryTermRef from Allocator
This commit is contained in:
@@ -18,7 +18,7 @@ pub trait Allocator<'a>
|
|||||||
fn reset(&mut self);
|
fn reset(&mut self);
|
||||||
fn reset_contents(&mut self) {}
|
fn reset_contents(&mut self) {}
|
||||||
|
|
||||||
fn advance(&mut self, GenContext, QueryTermRef<'a>);
|
fn advance(&mut self, GenContext, usize);
|
||||||
fn advance_arg(&mut self);
|
fn advance_arg(&mut self);
|
||||||
|
|
||||||
fn bindings(&self) -> &AllocVarDict<'a>;
|
fn bindings(&self) -> &AllocVarDict<'a>;
|
||||||
|
|||||||
@@ -311,7 +311,7 @@ impl<'a, TermMarker: Allocator<'a>> CodeGenerator<'a, TermMarker>
|
|||||||
let mut target = Vec::new();
|
let mut target = Vec::new();
|
||||||
|
|
||||||
// reset self.marker.arg_c to 1.
|
// reset self.marker.arg_c to 1.
|
||||||
self.marker.advance(term_loc, *term);
|
self.marker.advance(term_loc, term.arity());
|
||||||
self.marker.mark_var(name, Level::Shallow, vr, term_loc, &mut target);
|
self.marker.mark_var(name, Level::Shallow, vr, term_loc, &mut target);
|
||||||
|
|
||||||
code.push(Line::Query(target));
|
code.push(Line::Query(target));
|
||||||
@@ -354,7 +354,7 @@ impl<'a, TermMarker: Allocator<'a>> CodeGenerator<'a, TermMarker>
|
|||||||
let mut target = Vec::new();
|
let mut target = Vec::new();
|
||||||
|
|
||||||
// reset self.marker.arg_c to 1.
|
// reset self.marker.arg_c to 1.
|
||||||
self.marker.advance(term_loc, *term);
|
self.marker.advance(term_loc, term.arity());
|
||||||
self.marker.mark_var(name, Level::Shallow, vr, term_loc, &mut target);
|
self.marker.mark_var(name, Level::Shallow, vr, term_loc, &mut target);
|
||||||
|
|
||||||
code.push(Line::Query(target));
|
code.push(Line::Query(target));
|
||||||
@@ -380,7 +380,7 @@ impl<'a, TermMarker: Allocator<'a>> CodeGenerator<'a, TermMarker>
|
|||||||
let mut target = Vec::new();
|
let mut target = Vec::new();
|
||||||
|
|
||||||
// reset self.marker.arg_c to 1.
|
// reset self.marker.arg_c to 1.
|
||||||
self.marker.advance(term_loc, *term);
|
self.marker.advance(term_loc, term.arity());
|
||||||
self.marker.mark_var(name, Level::Shallow, vr, term_loc, &mut target);
|
self.marker.mark_var(name, Level::Shallow, vr, term_loc, &mut target);
|
||||||
|
|
||||||
code.push(Line::Query(target));
|
code.push(Line::Query(target));
|
||||||
@@ -389,7 +389,7 @@ impl<'a, TermMarker: Allocator<'a>> CodeGenerator<'a, TermMarker>
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
_ if chunk_num == 0 => {
|
_ if chunk_num == 0 => {
|
||||||
self.marker.advance(GenContext::Head, *term);
|
self.marker.advance(GenContext::Head, term.arity());
|
||||||
|
|
||||||
let iter = term.post_order_iter();
|
let iter = term.post_order_iter();
|
||||||
code.push(Line::Query(self.compile_target(iter, term_loc, is_exposed)));
|
code.push(Line::Query(self.compile_target(iter, term_loc, is_exposed)));
|
||||||
@@ -445,7 +445,7 @@ impl<'a, TermMarker: Allocator<'a>> CodeGenerator<'a, TermMarker>
|
|||||||
let &Rule { head: (ref p0, ref p1), ref clauses } = rule;
|
let &Rule { head: (ref p0, ref p1), ref clauses } = rule;
|
||||||
let mut code = Vec::new();
|
let mut code = Vec::new();
|
||||||
|
|
||||||
self.marker.advance(GenContext::Head, QueryTermRef::Term(p0));
|
self.marker.advance(GenContext::Head, p0.arity());
|
||||||
self.compile_seq_prelude(&conjunct_info, &mut code);
|
self.compile_seq_prelude(&conjunct_info, &mut code);
|
||||||
|
|
||||||
if p0.is_clause() {
|
if p0.is_clause() {
|
||||||
@@ -504,7 +504,7 @@ impl<'a, TermMarker: Allocator<'a>> CodeGenerator<'a, TermMarker>
|
|||||||
let iter = ChunkedIterator::from_fact(term);
|
let iter = ChunkedIterator::from_fact(term);
|
||||||
|
|
||||||
self.collect_var_data(iter);
|
self.collect_var_data(iter);
|
||||||
self.marker.advance(GenContext::Head, QueryTermRef::Term(term));
|
self.marker.advance(GenContext::Head, term.arity());
|
||||||
|
|
||||||
let mut code = Vec::new();
|
let mut code = Vec::new();
|
||||||
|
|
||||||
@@ -527,7 +527,7 @@ impl<'a, TermMarker: Allocator<'a>> CodeGenerator<'a, TermMarker>
|
|||||||
index: usize,
|
index: usize,
|
||||||
is_exposed: bool)
|
is_exposed: bool)
|
||||||
{
|
{
|
||||||
self.marker.advance(term_loc, term);
|
self.marker.advance(term_loc, term.arity());
|
||||||
|
|
||||||
let iter = term.post_order_iter();
|
let iter = term.post_order_iter();
|
||||||
let compiled_query = Line::Query(self.compile_target(iter, term_loc, is_exposed));
|
let compiled_query = Line::Query(self.compile_target(iter, term_loc, is_exposed));
|
||||||
|
|||||||
@@ -348,8 +348,8 @@ impl<'a> Allocator<'a> for DebrayAllocator<'a>
|
|||||||
self.bindings
|
self.bindings
|
||||||
}
|
}
|
||||||
|
|
||||||
fn advance(&mut self, _: GenContext, term: QueryTermRef<'a>) {
|
fn advance(&mut self, _: GenContext, arity: usize) {
|
||||||
self.arg_c = 1;
|
self.arg_c = 1;
|
||||||
self.temp_lb = term.arity() + 1;
|
self.temp_lb = arity + 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -129,13 +129,13 @@ impl<'a> Allocator<'a> for NaiveAllocator<'a>
|
|||||||
self.bindings.clear();
|
self.bindings.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn advance(&mut self, term_loc: GenContext, term: QueryTermRef<'a>) {
|
fn advance(&mut self, term_loc: GenContext, arity: usize) {
|
||||||
if let GenContext::Head = term_loc {
|
if let GenContext::Head = term_loc {
|
||||||
self.arg_c = 1;
|
self.arg_c = 1;
|
||||||
self.temp_c = max(term.arity() + 1, self.temp_c);
|
self.temp_c = max(arity + 1, self.temp_c);
|
||||||
} else {
|
} else {
|
||||||
self.arg_c = 1;
|
self.arg_c = 1;
|
||||||
self.temp_c = term.arity() + 1;
|
self.temp_c = arity + 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user