From f745b077a9cef3e3583430382959f57b8ff943b5 Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Mon, 22 Apr 2019 18:54:03 -0600 Subject: [PATCH] instantiate variables in numerical comparisons --- src/prolog/codegen.rs | 8 ++++++++ src/prolog/machine/machine_errors.rs | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/prolog/codegen.rs b/src/prolog/codegen.rs index 9d84e1d2..ad2d8f7b 100644 --- a/src/prolog/codegen.rs +++ b/src/prolog/codegen.rs @@ -304,6 +304,14 @@ impl<'a, TermMarker: Allocator<'a>> CodeGenerator { match ct { &InlinedClauseType::CompareNumber(cmp, ..) => { + if let &Term::Var(ref vr, ref name) = terms[0].as_ref() { + self.mark_non_callable(name.clone(), 2, term_loc, vr, code); + } + + if let &Term::Var(ref vr, ref name) = terms[1].as_ref() { + self.mark_non_callable(name.clone(), 2, term_loc, vr, code); + } + let (mut lcode, at_1) = self.call_arith_eval(terms[0].as_ref(), 1)?; let (mut rcode, at_2) = self.call_arith_eval(terms[1].as_ref(), 2)?; diff --git a/src/prolog/machine/machine_errors.rs b/src/prolog/machine/machine_errors.rs index b37fb637..ddff619f 100644 --- a/src/prolog/machine/machine_errors.rs +++ b/src/prolog/machine/machine_errors.rs @@ -251,7 +251,7 @@ pub enum EvalError { // FloatOverflow, // IntOverflow, // Undefined, -// Underflow, +// FloatUnderflow, ZeroDivisor, NoRoots } @@ -262,7 +262,7 @@ impl EvalError { // EvalError::FloatOverflow => "float_overflow", // EvalError::IntOverflow => "int_overflow", // EvalError::Undefined => "undefined", -// EvalError::Underflow => "underflow", +// EvalError::FloatUnderflow => "underflow", EvalError::ZeroDivisor => "zero_divisor", EvalError::NoRoots => "no_roots" } -- 2.54.0