From 0a133c70f1d2c068e8ad3ed5527f13ea7246fc68 Mon Sep 17 00:00:00 2001 From: Oleh Krehel Date: Wed, 23 Sep 2015 13:50:15 +0200 Subject: [PATCH] Move let-when-compile to lisp-mode.el This fixes the bootstrapping problem of `let-when-compile' using `cl-progv' while being in subr.el (i.e. before cl stuff was loaded). --- lisp/emacs-lisp/lisp-mode.el | 13 +++++++++++++ lisp/subr.el | 13 ------------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/lisp/emacs-lisp/lisp-mode.el b/lisp/emacs-lisp/lisp-mode.el index 4576f5cd6ba..f8b935eb90b 100644 --- a/lisp/emacs-lisp/lisp-mode.el +++ b/lisp/emacs-lisp/lisp-mode.el @@ -235,6 +235,19 @@ (match-beginning 0))))) (throw 'found t)))))) +(defmacro let-when-compile (bindings &rest body) + "Like `let', but allow for compile time optimization. +Use BINDINGS as in regular `let', but in BODY each usage should +be wrapped in `eval-when-compile'. +This will generate compile-time constants from BINDINGS." + (declare (indent 1) (debug let)) + (cl-progv (mapcar #'car bindings) + (mapcar (lambda (x) (eval (cadr x))) bindings) + (macroexpand-all + (macroexp-progn + body) + macroexpand-all-environment))) + (let-when-compile ((lisp-fdefs '("defmacro" "defun")) (lisp-vdefs '("defvar")) diff --git a/lisp/subr.el b/lisp/subr.el index ce3011d4e46..b1b363864f9 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -1503,19 +1503,6 @@ All symbols are bound before the VALUEFORMs are evalled." ,@(mapcar (lambda (binder) `(setq ,@binder)) binders) ,@body)) -(defmacro let-when-compile (bindings &rest body) - "Like `let', but allow for compile time optimization. -Use BINDINGS as in regular `let', but in BODY each usage should -be wrapped in `eval-when-compile'. -This will generate compile-time constants from BINDINGS." - (declare (indent 1) (debug let)) - (cl-progv (mapcar #'car bindings) - (mapcar (lambda (x) (eval (cadr x))) bindings) - (macroexpand-all - (macroexp-progn - body) - macroexpand-all-environment))) - (defmacro with-wrapper-hook (hook args &rest body) "Run BODY, using wrapper functions from HOOK with additional ARGS. HOOK is an abnormal hook. Each hook function in HOOK \"wraps\" -- 2.39.2