]> git.eshelyaron.com Git - emacs.git/commitdiff
calc/calc.el (math-normalize-error): New variable.
authorJay Belanger <jay.p.belanger@gmail.com>
Sun, 29 Jul 2012 18:51:16 +0000 (13:51 -0500)
committerJay Belanger <jay.p.belanger@gmail.com>
Sun, 29 Jul 2012 18:51:16 +0000 (13:51 -0500)
(math-normalize): Set `math-normalize-error' to t when there's an error.

calc/calc-alg.el (math-simplify): Don't simplify when `math-normalize'
returns an error.

lisp/ChangeLog
lisp/calc/calc-alg.el
lisp/calc/calc.el

index a6fd9c3e0d399d5a48ec9e448d77eaefc9de9b2d..18772064d7d9ce194562b5807a5d7699d9db94f7 100644 (file)
@@ -1,3 +1,12 @@
+2012-07-29  Jay Belanger  <jay.p.belanger@gmail.com>
+
+       * calc/calc.el (math-normalize-error): New variable.
+       (math-normalize): Set `math-normalize-error' to t
+       when there's an error.
+
+       * calc/calc-alg.el (math-simplify): Don't simplify when
+       `math-normalize' returns an error.
+
 2012-07-29  Eli Zaretskii  <eliz@gnu.org>
 
        * international/mule-cmds.el (set-locale-environment): Revert last
index 50b31400a6a0c71c5c534d658c010b0033d32b16..3182e85a8c6647242fd26299c751dc59ecd4f408 100644 (file)
 ;; math-simplify-step, which is called by math-simplify.
 (defvar math-top-only)
 
+;; math-normalize-error is declared in calc.el.
+(defvar math-normalize-error)
 (defun math-simplify (top-expr)
   (let ((math-simplifying t)
        (math-top-only (consp calc-simplify-mode))
       (calc-with-default-simplification
        (while (let ((r simp-rules))
                (setq res (math-normalize top-expr))
-               (while r
-                 (setq res (math-rewrite res (car r))
-                       r (cdr r)))
-               (not (equal top-expr (setq res (math-simplify-step res)))))
+                (if (not math-normalize-error)
+                    (progn
+                      (while r
+                        (setq res (math-rewrite res (car r))
+                              r (cdr r)))
+                      (not (equal top-expr (setq res (math-simplify-step res)))))))
         (setq top-expr res)))))
   top-expr)
 
index 7fb9148535a3a171377d9487453deb5334f4b729..a149cfe79669f111c997b1d41cd0a94508d776d1 100644 (file)
@@ -2583,7 +2583,11 @@ largest Emacs integer.")
 ;;; Reduce an object to canonical (normalized) form.  [O o; Z Z] [Public]
 
 (defvar math-normalize-a)
+(defvar math-normalize-error nil
+  "Non-nil if the last call the `math-normalize' returned an error.")
+
 (defun math-normalize (math-normalize-a)
+  (setq math-normalize-error nil)
   (cond
    ((not (consp math-normalize-a))
     (if (integerp math-normalize-a)
@@ -2672,31 +2676,38 @@ largest Emacs integer.")
                                        (fboundp (car math-normalize-a))))
                               (apply (car math-normalize-a) args)))))
                (wrong-number-of-arguments
+                 (setq math-normalize-error t)
                 (calc-record-why "*Wrong number of arguments"
                                  (cons (car math-normalize-a) args))
                 nil)
                (wrong-type-argument
+                 (setq math-normalize-error t)
                 (or calc-next-why
                      (calc-record-why "Wrong type of argument"
                                       (cons (car math-normalize-a) args)))
                 nil)
                (args-out-of-range
+                 (setq math-normalize-error t)
                 (calc-record-why "*Argument out of range"
                                   (cons (car math-normalize-a) args))
                 nil)
                (inexact-result
+                 (setq math-normalize-error t)
                 (calc-record-why "No exact representation for result"
                                  (cons (car math-normalize-a) args))
                 nil)
                (math-overflow
+                 (setq math-normalize-error t)
                 (calc-record-why "*Floating-point overflow occurred"
                                  (cons (car math-normalize-a) args))
                 nil)
                (math-underflow
+                 (setq math-normalize-error t)
                 (calc-record-why "*Floating-point underflow occurred"
                                  (cons (car math-normalize-a) args))
                 nil)
                (void-variable
+                 (setq math-normalize-error t)
                 (if (eq (nth 1 err) 'var-EvalRules)
                     (progn
                       (setq var-EvalRules nil)