pass binding info to arithmetic evaluator

This commit is contained in:
Mark Thom
2017-11-06 13:35:48 -07:00
parent 4cc3409809
commit 2225674b58
2 changed files with 24 additions and 27 deletions

View File

@@ -306,23 +306,11 @@ impl<'a, TermMarker: Allocator<'a>> CodeGenerator<'a, TermMarker>
});
},
&QueryTermRef::Is(terms) => {
let mut target = Vec::new();
self.marker.advance(term_loc, *term);
// instantiate any vars introduced in the expr.
for term_ref in terms[1].post_order_iter() {
if let TermRef::Var(lvl, vr, name) = term_ref {
self.marker.mark_var(name, lvl, vr, term_loc, &mut target);
}
}
if !target.is_empty() {
code.push(Line::Query(target));
}
let mut arith_code = {
let mut evaluator = ArithmeticEvaluator::new(self.marker.bindings());
evaluator.eval(terms[1].as_ref())?
};
let mut evaluator = ArithmeticEvaluator::new();
let mut arith_code = evaluator.eval(terms[1].as_ref())?;
code.append(&mut arith_code);
match terms[0].as_ref() {