]> git.eshelyaron.com Git - emacs.git/commitdiff
(byte-optimize-approx-equal): Use <=, not <.
authorRichard M. Stallman <rms@gnu.org>
Tue, 6 May 1997 03:53:10 +0000 (03:53 +0000)
committerRichard M. Stallman <rms@gnu.org>
Tue, 6 May 1997 03:53:10 +0000 (03:53 +0000)
(byte-optimize-minus, byte-optimize-plus): Optimize adding
or subtracting 1.

lisp/emacs-lisp/byte-opt.el

index 4b7b9f305e61f1ad37eae464c64e1f0cb356e815..c75dbe4b696b4f9241c74294d5ac532e3cc238e2 100644 (file)
 ;;      form))
 
 (defun byte-optimize-approx-equal (x y)
-  (< (* (abs (- x y)) 100) (abs (+ x y))))
+  (<= (* (abs (- x y)) 100) (abs (+ x y))))
 
 ;; Collect all the constants from FORM, after the STARTth arg,
 ;; and apply FUN to them to make one argument at the end.
 ;;; (actually, it would be safe if we know the sole arg
 ;;; is not a marker).
 ;;     ((null (cdr (cdr form))) (nth 1 form))
+       ((and (null (nthcdr 3 form))
+             (or (memq (nth 1 form) '(1 -1))
+                 (memq (nth 2 form) '(1 -1))))
+        ;; Optiize (+ x 1) into (1+ x) and (+ x -1) into (1- x).
+        (let ((integer
+               (if (memq (nth 1 form) '(1 -1))
+                   (nth 1 form)
+                 (nth 2 form)))
+              (other
+               (if (memq (nth 1 form) '(1 -1))
+                   (nth 2 form)
+                 (nth 1 form))))
+          (list (if (eq integer 1) '1+ '1-)
+                other)))
        (t form)))
 
 (defun byte-optimize-minus (form)
           ;; (- x y ... 0)  --> (- x y ...)
           (setq form (copy-sequence form))
           (setcdr (cdr (cdr form)) (delq 0 (nthcdr 3 form))))
+         ((equal (nthcdr 2 form) '(1))
+          (setq form (list '1- (nth 1 form))))
+         ((equal (nthcdr 2 form) '(-1))
+          (setq form (list '1+ (nth 1 form))))
          ;; If form is (- CONST foo... CONST), merge first and last.
          ((and (numberp (nth 1 form))
                (numberp last))