]> git.eshelyaron.com Git - emacs.git/commitdiff
(math-read-number): Handle C numbers beginning with 0 correctly.
authorJay Belanger <jay.p.belanger@gmail.com>
Tue, 5 Aug 2008 03:38:24 +0000 (03:38 +0000)
committerJay Belanger <jay.p.belanger@gmail.com>
Tue, 5 Aug 2008 03:38:24 +0000 (03:38 +0000)
lisp/calc/calc.el

index 0721e8a983f8753d9c65caa2bfc4a54429856bad..a4a6387296b9b354c0c3adabf8183f525f506e98 100644 (file)
@@ -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)