# HG changeset patch # User Karl Heuer # Date 878529503 0 # Node ID 622d0b6c644554b42511dae2b36cfac84152b0e3 # Parent fd00ceeb06c69fe0a60ebe93a229897cc3f2da70 (byte-optimize-concat): New function. diff -r fd00ceeb06c6 -r 622d0b6c6445 lisp/emacs-lisp/byte-opt.el --- a/lisp/emacs-lisp/byte-opt.el Mon Nov 03 02:57:05 1997 +0000 +++ b/lisp/emacs-lisp/byte-opt.el Mon Nov 03 03:58:23 1997 +0000 @@ -697,7 +697,7 @@ ((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). + ;; Optimize (+ x 1) into (1+ x) and (+ x -1) into (1- x). (let ((integer (if (memq (nth 1 form) '(1 -1)) (nth 1 form) @@ -1076,6 +1076,18 @@ (while (>= (setq count (1- count)) 0) (setq form (list 'cdr form))) form))) + +(put 'concat 'byte-optimizer 'byte-optimize-concat) +(defun byte-optimize-concat (form) + (let ((args (cdr form)) + (constant t)) + (while (and args constant) + (or (byte-compile-constp (car args)) + (setq constant nil)) + (setq args (cdr args))) + (if constant + (eval form) + form))) ;;; enumerating those functions which need not be called if the returned ;;; value is not used. That is, something like