From 2eac902c33832c8888ffd52f36d3fccf04cc6c49 Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Tue, 19 May 2020 10:45:54 -0600 Subject: [PATCH] correct fixnum overflow on negation (#528) --- src/prolog/arithmetic.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/prolog/arithmetic.rs b/src/prolog/arithmetic.rs index 87df3dbd..e889b019 100644 --- a/src/prolog/arithmetic.rs +++ b/src/prolog/arithmetic.rs @@ -474,7 +474,12 @@ impl Neg for Number { fn neg(self) -> Self::Output { match self { - Number::Fixnum(n) => Number::Fixnum(-n), + Number::Fixnum(n) => + if let Some(n) = n.checked_neg() { + Number::Fixnum(n) + } else { + Number::from(-Integer::from(n)) + } Number::Integer(n) => Number::Integer(Rc::new(-Integer::from(&*n))), Number::Float(OrderedFloat(f)) => Number::Float(OrderedFloat(-f)), Number::Rational(r) => Number::Rational(Rc::new(-Rational::from(&*r))), -- 2.54.0