From: Mark Thom Date: Tue, 23 Apr 2019 00:54:03 +0000 (-0600) Subject: instantiate variables in numerical comparisons X-Git-Tag: v0.8.110~95 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=f745b077a9cef3e3583430382959f57b8ff943b5;p=scryer-prolog.git instantiate variables in numerical comparisons --- 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" }