summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
authorMattias EngdegÄrd <mattiase@acm.org>2019-07-16 17:18:32 +0200
committerMattias EngdegÄrd <mattiase@acm.org>2019-07-16 17:37:46 +0200
commita87840fffbf471d53eba17ea683728125d2d4767 (patch)
tree3529d052a679c420f27a7d44bdbb8d80d9f7779d /lisp
parent0a2461be9edb218bf9ca56156d8966a2421f13a7 (diff)
downloademacs-a87840fffbf471d53eba17ea683728125d2d4767.tar.gz
emacs-a87840fffbf471d53eba17ea683728125d2d4767.tar.bz2
emacs-a87840fffbf471d53eba17ea683728125d2d4767.zip
Fix calc number formatting with digit grouping (bug#36689)
The functions math-format-hex and math-format-octal were not implemented, yet called, leading to a crash when using hex or octal radix with digit grouping. * test/lisp/calc/calc-tests.el (calc-test-format-radix): New test. * lisp/calc/calc-ext.el: Don't declare non-existing functions. (math--format-integer-fancy): Don't call non-existing functions. * lisp/calc/calc-bin.el (math-format-binary, math-binary-digits): Simplify, fixing 0-padding bug.
Diffstat (limited to 'lisp')
-rw-r--r--lisp/calc/calc-bin.el13
-rw-r--r--lisp/calc/calc-ext.el14
2 files changed, 5 insertions, 22 deletions
diff --git a/lisp/calc/calc-bin.el b/lisp/calc/calc-bin.el
index b4371bdaf98..558e309e472 100644
--- a/lisp/calc/calc-bin.el
+++ b/lisp/calc/calc-bin.el
@@ -506,18 +506,9 @@
a (/ a calc-number-radix)))
s)))
-(defconst math-binary-digits ["000" "001" "010" "011"
- "100" "101" "110" "111"])
(defun math-format-binary (a) ; [X S]
- (if (< a 8)
- (if (< a 0)
- (concat "-" (math-format-binary (- a)))
- (aref math-binary-digits a))
- (let ((s ""))
- (while (> a 7)
- (setq s (concat (aref math-binary-digits (% a 8)) s)
- a (/ a 8)))
- (concat (math-format-binary a) s))))
+ (let ((calc-number-radix 2))
+ (math-format-radix a)))
;;; Decompose into integer and fractional parts, without depending
;;; on calc-internal-prec.
diff --git a/lisp/calc/calc-ext.el b/lisp/calc/calc-ext.el
index 203625873a5..0b3c489d453 100644
--- a/lisp/calc/calc-ext.el
+++ b/lisp/calc/calc-ext.el
@@ -64,8 +64,6 @@
(declare-function math-compose-expr "calccomp" (a prec &optional div))
(declare-function math-abs "calc-arith" (a))
(declare-function math-format-binary "calc-bin" (a))
-(declare-function math-format-octal "calc-bin" (a))
-(declare-function math-format-hex "calc-bin" (a))
(declare-function math-format-radix "calc-bin" (a))
(declare-function math-compute-max-digits "calc-bin" (w r))
(declare-function math-map-vec "calc-vec" (f a))
@@ -3402,15 +3400,9 @@ If X is not an error form, return 1."
a))
(defun math--format-integer-fancy (a) ; [I]
- (let ((str (cond ((= calc-number-radix 10)
- (number-to-string a))
- ((= calc-number-radix 2)
- (math-format-binary a))
- ((= calc-number-radix 8)
- (math-format-octal a))
- ((= calc-number-radix 16)
- (math-format-hex a))
- (t (math-format-radix a)))))
+ (let ((str (if (= calc-number-radix 10)
+ (number-to-string a)
+ (math-format-radix a))))
(if calc-leading-zeros
(let* ((calc-internal-prec 6)
(digs (math-compute-max-digits (math-abs calc-word-size)