From: Karl Heuer Date: Mon, 3 Nov 1997 03:58:23 +0000 (+0000) Subject: (byte-optimize-concat): New function. X-Git-Tag: emacs-20.3~2863 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=79d137ffe7dac5fe3041b4916c715f4ce91143af;p=emacs.git (byte-optimize-concat): New function. --- diff --git a/lisp/emacs-lisp/byte-opt.el b/lisp/emacs-lisp/byte-opt.el index c75dbe4b696..56dcc9e2427 100644 --- a/lisp/emacs-lisp/byte-opt.el +++ b/lisp/emacs-lisp/byte-opt.el @@ -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