diff options
author | Stefan Monnier <monnier@iro.umontreal.ca> | 2012-07-04 10:42:59 -0400 |
---|---|---|
committer | Stefan Monnier <monnier@iro.umontreal.ca> | 2012-07-04 10:42:59 -0400 |
commit | b5771c0d82b0c1b376e53d8bb92ec4137901db67 (patch) | |
tree | aad22c3380c3eecc906f57a2d48eb802e48b1700 /lisp/emacs-lisp | |
parent | ee28be33a535e41c74f3a4d5c0f3878e44366942 (diff) | |
download | emacs-b5771c0d82b0c1b376e53d8bb92ec4137901db67.tar.gz emacs-b5771c0d82b0c1b376e53d8bb92ec4137901db67.tar.bz2 emacs-b5771c0d82b0c1b376e53d8bb92ec4137901db67.zip |
* lisp/emacs-lisp/bytecomp.el (byte-compile): Don't signal an error if the
function is already compiled.
Diffstat (limited to 'lisp/emacs-lisp')
-rw-r--r-- | lisp/emacs-lisp/bytecomp.el | 40 |
1 files changed, 25 insertions, 15 deletions
diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el index 71b61ec74cc..76b147a4c65 100644 --- a/lisp/emacs-lisp/bytecomp.el +++ b/lisp/emacs-lisp/bytecomp.el @@ -2485,22 +2485,32 @@ If FORM is a lambda or a macro, byte-compile it as a function." (macro (eq (car-safe fun) 'macro))) (if macro (setq fun (cdr fun))) - (when (symbolp form) - (unless (memq (car-safe fun) '(closure lambda)) + (cond + ;; Up until Emacs-24.1, byte-compile silently did nothing when asked to + ;; compile something invalid. So let's tune down the complaint from an + ;; error to a simple message for the known case where signaling an error + ;; causes problems. + ((byte-code-function-p fun) + (message "Function %s is already compiled" + (if (symbolp form) form "provided")) + fun) + (t + (when (symbolp form) + (unless (memq (car-safe fun) '(closure lambda)) + (error "Don't know how to compile %S" fun)) + (setq fun (byte-compile--reify-function fun)) + (setq lexical-binding (eq (car fun) 'closure))) + (unless (eq (car-safe fun) 'lambda) (error "Don't know how to compile %S" fun)) - (setq fun (byte-compile--reify-function fun)) - (setq lexical-binding (eq (car fun) 'closure))) - (unless (eq (car-safe fun) 'lambda) - (error "Don't know how to compile %S" fun)) - ;; Expand macros. - (setq fun (byte-compile-preprocess fun)) - ;; Get rid of the `function' quote added by the `lambda' macro. - (if (eq (car-safe fun) 'function) (setq fun (cadr fun))) - (setq fun (byte-compile-lambda fun)) - (if macro (push 'macro fun)) - (if (symbolp form) - (fset form fun) - fun))))) + ;; Expand macros. + (setq fun (byte-compile-preprocess fun)) + ;; Get rid of the `function' quote added by the `lambda' macro. + (if (eq (car-safe fun) 'function) (setq fun (cadr fun))) + (setq fun (byte-compile-lambda fun)) + (if macro (push 'macro fun)) + (if (symbolp form) + (fset form fun) + fun))))))) (defun byte-compile-sexp (sexp) "Compile and return SEXP." |