From: Leo Liu Date: Sat, 24 May 2014 15:14:47 +0000 (+0800) Subject: * calc/calc.el (math-bignum): Handle most-negative-fixnum. X-Git-Tag: emacs-25.0.90~2612^2~709^2~895 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=ec774634839b0d6ea52f96e272954bdbb5cd9726;p=emacs.git * calc/calc.el (math-bignum): Handle most-negative-fixnum. Fixes: debbugs:17556 --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 7c2b1ec5ad6..b786027f76d 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2014-05-24 Leo Liu + + * calc/calc.el (math-bignum): Handle most-negative-fixnum. (Bug#17556) + 2014-05-23 Stefan Monnier * minibuffer.el (completion--sreverse): Remove. diff --git a/lisp/calc/calc.el b/lisp/calc/calc.el index ba1c7de9967..04d852e5cb3 100644 --- a/lisp/calc/calc.el +++ b/lisp/calc/calc.el @@ -2773,9 +2773,18 @@ largest Emacs integer.") ;; Coerce integer A to be a bignum. [B S] (defun math-bignum (a) - (if (>= a 0) - (cons 'bigpos (math-bignum-big a)) - (cons 'bigneg (math-bignum-big (- a))))) + (cond + ((>= a 0) + (cons 'bigpos (math-bignum-big a))) + ((= a most-negative-fixnum) + ;; Note: cannot get the negation directly because + ;; (- most-negative-fixnum) is most-negative-fixnum. + ;; + ;; most-negative-fixnum := -most-positive-fixnum - 1 + (math-sub (cons 'bigneg (math-bignum-big most-positive-fixnum)) + 1)) + (t + (cons 'bigneg (math-bignum-big (- a)))))) (defun math-bignum-big (a) ; [L s] (if (= a 0)