Mercurial > emacs
changeset 13474:3e7f6fdc234d
(byte-compile-associative): Do operations left to right.
(byte-force-recompile): Improve the prompt.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Fri, 10 Nov 1995 17:16:57 +0000 |
parents | 4492ba9a0757 |
children | ddf1e34018d2 |
files | lisp/emacs-lisp/bytecomp.el |
diffstat | 1 files changed, 21 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/emacs-lisp/bytecomp.el Fri Nov 10 17:13:56 1995 +0000 +++ b/lisp/emacs-lisp/bytecomp.el Fri Nov 10 17:16:57 1995 +0000 @@ -1125,7 +1125,7 @@ (defun byte-force-recompile (directory) "Recompile every `.el' file in DIRECTORY that already has a `.elc' file. Files in subdirectories of DIRECTORY are processed also." - (interactive "DByte recompile directory: ") + (interactive "DByte force recompile (directory): ") (byte-recompile-directory directory nil t)) ;;;###autoload @@ -1905,9 +1905,16 @@ ;; If the interactive spec is a call to `list', ;; don't compile it, because `call-interactively' ;; looks at the args of `list'. - (or (eq (car-safe (nth 1 int)) 'list) - (setq int (list 'interactive - (byte-compile-top-level (nth 1 int)))))) + (let ((form (nth 1 int))) + (while (or (eq (car-safe form) 'let) + (eq (car-safe form) 'let*) + (eq (car-safe form) 'save-excursion)) + (while (consp (cdr form)) + (setq form (cdr form))) + (setq form (car form))) + (or (eq (car-safe form) 'list) + (setq int (list 'interactive + (byte-compile-top-level (nth 1 int))))))) ((cdr int) (byte-compile-warn "malformed interactive spec: %s" (prin1-to-string int)))))) @@ -2418,13 +2425,18 @@ ;; Compile a function that accepts one or more args and is right-associative. +;; We do it by left-associativity so that the operations +;; are done in the same order as in interpreted code. (defun byte-compile-associative (form) (if (cdr form) - (let ((opcode (get (car form) 'byte-opcode))) - ;; To compile all the args first may enable some optimizations. - (mapcar 'byte-compile-form (setq form (cdr form))) - (while (setq form (cdr form)) - (byte-compile-out opcode 0))) + (let ((opcode (get (car form) 'byte-opcode)) + (args (copy-sequence (cdr form)))) + (byte-compile-form (car args)) + (setq args (cdr args)) + (while args + (byte-compile-form (car args)) + (byte-compile-out opcode 0) + (setq args (cdr args)))) (byte-compile-constant (eval form))))