Mercurial > hg > xemacs-beta
diff lisp/cl-macs.el @ 5266:f9ec07abdbf9
Transform safe calls to (= X Y Z) to (and (= X Y) (= Y Z)); same for < > <= >=
lisp/ChangeLog addition:
2010-09-16 Aidan Kehoe <kehoea@parhasard.net>
* cl-macs.el (= < > <= >=):
When these functions are handed more than two arguments, and those
arguments have no side effects, transform to a series of two
argument calls, avoiding funcall in the byte-compiled code.
* mule/mule-cmds.el (finish-set-language-environment):
Take advantage of this change in a function called 256 times at
startup.
author | Aidan Kehoe <kehoea@parhasard.net> |
---|---|
date | Thu, 16 Sep 2010 14:31:40 +0100 |
parents | 0d436a78c514 |
children | 90a0084b3541 |
line wrap: on
line diff
--- a/lisp/cl-macs.el Thu Sep 16 14:10:44 2010 +0100 +++ b/lisp/cl-macs.el Thu Sep 16 14:31:40 2010 +0100 @@ -3773,6 +3773,25 @@ (string (cons 'concat (cddr form)))) form)) +(map nil + #'(lambda (function) + ;; There are byte codes for the two-argument versions of these + ;; functions; if the form has more arguments and those arguments + ;; have no side effects, transform to a series of two-argument + ;; calls. + (put function 'cl-compiler-macro + #'(lambda (form &rest arguments) + (if (or (null (nthcdr 3 form)) + (notevery #'cl-safe-expr-p (cdr form))) + form + (cons 'and (mapcon + #'(lambda (rest) + (and (cdr rest) + `((,(car form) ,(pop rest) + ,(car rest))))) + (cdr form))))))) + '(= < > <= >=)) + (mapc #'(lambda (y) (put (car y) 'side-effect-free t)