# HG changeset patch # User Richard M. Stallman # Date 862890790 0 # Node ID fdb29fa454bfb48270225f9a4fee505f82497f1c # Parent 447ca1b334e5031a5b280288002135674711a2a9 (byte-optimize-approx-equal): Use <=, not <. (byte-optimize-minus, byte-optimize-plus): Optimize adding or subtracting 1. diff -r 447ca1b334e5 -r fdb29fa454bf lisp/emacs-lisp/byte-opt.el --- 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))