]> Repositorios git - scryer-prolog.git/commitdiff
correct fixnum overflow on negation (#528)
authorMark Thom <[email protected]>
Tue, 19 May 2020 16:45:54 +0000 (10:45 -0600)
committerMark Thom <[email protected]>
Tue, 19 May 2020 16:45:54 +0000 (10:45 -0600)
src/prolog/arithmetic.rs

index 87df3dbd823c78a3b564b04abf8009c97e5a8a1e..e889b0195256ba5030da9cadf316a8885bf99485 100644 (file)
@@ -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))),