1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-12-03 08:30:09 +00:00

* lisp/emacs-lisp/bytecomp.el (byte-compile): Don't signal an error if the

function is already compiled.
This commit is contained in:
Stefan Monnier 2012-07-04 10:42:59 -04:00
parent ee28be33a5
commit b5771c0d82
2 changed files with 28 additions and 15 deletions

View File

@ -1,5 +1,8 @@
2012-07-04 Stefan Monnier <monnier@iro.umontreal.ca>
* emacs-lisp/bytecomp.el (byte-compile): Don't signal an error if the
function is already compiled.
* xml.el (xml-name-regexp): Remove, redundant. Use xml-name-re.
2012-07-03 Michael Albinus <michael.albinus@gmx.de>

View File

@ -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."