diff options
author | Richard M. Stallman <rms@gnu.org> | 1992-10-31 09:27:47 +0000 |
---|---|---|
committer | Richard M. Stallman <rms@gnu.org> | 1992-10-31 09:27:47 +0000 |
commit | ffc394dd585f2d0eeef6bf6551219e8eb7349aba (patch) | |
tree | 8d269b2248e6040d7a1555ad2aedac6eb6c30bf2 /lisp/emacs-lisp | |
parent | 259c5af9d8f4c900177a7783e179fc1caf1cbe1c (diff) | |
download | emacs-ffc394dd585f2d0eeef6bf6551219e8eb7349aba.tar.gz emacs-ffc394dd585f2d0eeef6bf6551219e8eb7349aba.tar.bz2 emacs-ffc394dd585f2d0eeef6bf6551219e8eb7349aba.zip |
(byte-compile-lambda):
Don't compile the interactive spec if it is a call to `list'.
Diffstat (limited to 'lisp/emacs-lisp')
-rw-r--r-- | lisp/emacs-lisp/bytecomp.el | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el index a337c7d8d97..a981a3cf033 100644 --- a/lisp/emacs-lisp/bytecomp.el +++ b/lisp/emacs-lisp/bytecomp.el @@ -1659,12 +1659,19 @@ If FORM is a lambda or a macro, byte-compile it as a function." ;; Skip (interactive) if it is in front (the most usual location). (if (eq int (car body)) (setq body (cdr body))) - (cond ((cdr int) + (cond ((consp (cdr int)) (if (cdr (cdr int)) (byte-compile-warn "malformed interactive spec: %s" (prin1-to-string int))) - (setq int (list 'interactive (byte-compile-top-level - (nth 1 int)))))))) + ;; 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)))))) + ((cdr int) + (byte-compile-warn "malformed interactive spec: %s" + (prin1-to-string int)))))) (let ((compiled (byte-compile-top-level (cons 'progn body) nil 'lambda))) (if (and (eq 'byte-code (car-safe compiled)) (byte-compile-version-cond |