]> Repositorios git - scryer-prolog.git/commitdiff
instantiated vars in arithmetic exprs
authorMark Thom <[email protected]>
Mon, 6 Nov 2017 17:45:27 +0000 (10:45 -0700)
committerMark Thom <[email protected]>
Mon, 6 Nov 2017 17:45:27 +0000 (10:45 -0700)
src/prolog/codegen.rs

index dc5a4c15751f822531ba0e5cd3d1fbc577234edc..ad0f4138ed0632d035ddae7563ddce85e1054a62 100644 (file)
@@ -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())?;