changeset 17680:fdb29fa454bf

(byte-optimize-approx-equal): Use <=, not <. (byte-optimize-minus, byte-optimize-plus): Optimize adding or subtracting 1.
author Richard M. Stallman <rms@gnu.org>
date Tue, 06 May 1997 03:53:10 +0000
parents 447ca1b334e5
children 59c4c8125906
files lisp/emacs-lisp/byte-opt.el
diffstat 1 files changed, 19 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/emacs-lisp/byte-opt.el	Tue May 06 03:42:02 1997 +0000
+++ b/lisp/emacs-lisp/byte-opt.el	Tue May 06 03:53:10 1997 +0000
@@ -643,7 +643,7 @@
 ;;      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.
@@ -694,6 +694,20 @@
 ;;; (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)
@@ -705,6 +719,10 @@
 	   ;; (- 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))