]> git.eshelyaron.com Git - emacs.git/commit
Add `macroexp--dynamic-variable-p`
authorMattias Engdegård <mattiase@acm.org>
Sat, 11 Dec 2021 20:39:19 +0000 (21:39 +0100)
committerMattias Engdegård <mattiase@acm.org>
Mon, 20 Dec 2021 15:26:02 +0000 (16:26 +0100)
commit8706f6fde13729bf330693cfd163773583e526a9
tree16b7674aa4c7604d6b5b5f96a40e840ecc2fd1f0
parent3259f399d46dabff5e0a87169d3d3455729d8681
Add `macroexp--dynamic-variable-p`

This predicate can be used for discriminating between lexically and
dynamically bound variables during macro-expansion (only).
It is restricted to internal use for the time being.

* lisp/emacs-lisp/bytecomp.el (byte-compile-initial-macro-environment):
Use macroexpand--all-toplevel.
* lisp/emacs-lisp/macroexp.el (macroexp-dynamic-variable-p): New.
(macroexp--expand-all): Maintain macroexp--dynvars.
(macroexpand-all): Rebind macroexp--dynvars.
(macroexpand--all-toplevel): New.
(internal-macroexpand-for-load): Use macroexpand--all-toplevel.
* src/eval.c (eval_sub): Transfer defvar declarations from
Vinternal_interpreter_environment into macroexp--dynvars during
lazy macro-expansion.
* src/lread.c (readevalloop): Rebind macroexp--dynvars around
read-and-evaluate operations.
(syms_of_lread): Define macroexp--dynvars.
* test/lisp/emacs-lisp/macroexp-resources/vk.el: New file.
* test/lisp/emacs-lisp/macroexp-tests.el (macroexp-tests--run-emacs)
(macroexp-tests--eval-in-subprocess)
(macroexp-tests--byte-compile-in-subprocess)
(macroexp--tests-dynamic-variable-p): Add tests.
lisp/emacs-lisp/bytecomp.el
lisp/emacs-lisp/macroexp.el
src/eval.c
src/lread.c
test/lisp/emacs-lisp/macroexp-resources/vk.el [new file with mode: 0644]
test/lisp/emacs-lisp/macroexp-tests.el