From: Mark Thom Date: Mon, 6 Nov 2017 17:45:27 +0000 (-0700) Subject: instantiated vars in arithmetic exprs X-Git-Tag: v0.8.110~680 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=4cc340980985b1b193114e847519ab20d2fe81d0;p=scryer-prolog.git instantiated vars in arithmetic exprs --- diff --git a/src/prolog/codegen.rs b/src/prolog/codegen.rs index dc5a4c15..ad0f4138 100644 --- a/src/prolog/codegen.rs +++ b/src/prolog/codegen.rs @@ -306,6 +306,20 @@ 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 evaluator = ArithmeticEvaluator::new(); let mut arith_code = evaluator.eval(terms[1].as_ref())?;