summaryrefslogtreecommitdiff
path: root/lisp/calc
diff options
context:
space:
mode:
authorJay Belanger <jay.p.belanger@gmail.com>2008-08-05 03:38:24 +0000
committerJay Belanger <jay.p.belanger@gmail.com>2008-08-05 03:38:24 +0000
commit57675fb5578db241eb2b62fce41ad864dae56bdf (patch)
tree8a978186b01930e191361cb3f6311b9a4c053123 /lisp/calc
parent4e6225928e54d42a7899dc20a5f56da51e056332 (diff)
downloademacs-57675fb5578db241eb2b62fce41ad864dae56bdf.tar.gz
(math-read-number): Handle C numbers beginning with 0 correctly.
Diffstat (limited to 'lisp/calc')
-rw-r--r--lisp/calc/calc.el11
1 files changed, 6 insertions, 5 deletions
diff --git a/lisp/calc/calc.el b/lisp/calc/calc.el
index 0721e8a983f..a4a6387296b 100644
--- a/lisp/calc/calc.el
+++ b/lisp/calc/calc.el
@@ -3455,7 +3455,7 @@ largest Emacs integer.")
;;; Parse a simple number in string form. [N X] [Public]
-(defun math-read-number (s)
+(defun math-read-number (s &optional decimal)
"Convert the string S into a Calc number."
(math-normalize
(cond
@@ -3465,7 +3465,8 @@ largest Emacs integer.")
(let ((digs (math-match-substring s 1)))
(if (and (eq calc-language 'c)
(> (length digs) 1)
- (eq (aref digs 0) ?0))
+ (eq (aref digs 0) ?0)
+ (null decimal))
(math-read-number (concat "8#" digs))
(if (<= (length digs) (* 2 math-bignum-digit-length))
(string-to-number digs)
@@ -3492,8 +3493,8 @@ largest Emacs integer.")
(frac (math-match-substring s 2)))
(let ((ilen (length int))
(flen (length frac)))
- (let ((int (if (> ilen 0) (math-read-number int) 0))
- (frac (if (> flen 0) (math-read-number frac) 0)))
+ (let ((int (if (> ilen 0) (math-read-number int t) 0))
+ (frac (if (> flen 0) (math-read-number frac t) 0)))
(and int frac (or (> ilen 0) (> flen 0))
(list 'float
(math-add (math-scale-int int flen) frac)
@@ -3503,7 +3504,7 @@ largest Emacs integer.")
((string-match "^\\(.*\\)[eE]\\([-+]?[0-9]+\\)$" s)
(let ((mant (math-match-substring s 1))
(exp (math-match-substring s 2)))
- (let ((mant (if (> (length mant) 0) (math-read-number mant) 1))
+ (let ((mant (if (> (length mant) 0) (math-read-number mant t) 1))
(exp (if (<= (length exp) (if (memq (aref exp 0) '(?+ ?-)) 8 7))
(string-to-number exp))))
(and mant exp (Math-realp mant) (> exp -4000000) (< exp 4000000)