From 79d137ffe7dac5fe3041b4916c715f4ce91143af Mon Sep 17 00:00:00 2001 From: Karl Heuer Date: Mon, 3 Nov 1997 03:58:23 +0000 Subject: [PATCH] (byte-optimize-concat): New function. --- lisp/emacs-lisp/byte-opt.el | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) 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 -- 2.39.2