mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-11-26 07:33:47 +00:00
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).
This commit is contained in:
parent
325200ac1d
commit
0a133c70f1
@ -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"))
|
||||
|
13
lisp/subr.el
13
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\"
|
||||
|
Loading…
Reference in New Issue
Block a user