]> git.eshelyaron.com Git - emacs.git/commit
cl-symbol-macrolet: Fix recent regression
authorStefan Monnier <monnier@iro.umontreal.ca>
Tue, 6 Sep 2022 04:08:35 +0000 (00:08 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Tue, 6 Sep 2022 04:08:35 +0000 (00:08 -0400)
commit2a78f06ef4d303b383749be3dabd0f9a68547e5e
tree42dcdeabc4dc6012ca2a29b40c8f85e3c3a15265
parent9219e83b3c0ef53df02caf4c8ba38f482937ab50
cl-symbol-macrolet: Fix recent regression

The recent fix for bug#57397 introduced a regression, breaking
the `cl-lib-symbol-macrolet-hide` test.  It turned out that the
origin of the problem was that `gv.el` uses `macroexpand-1` which
does not (can't) use `macroexpand` but `cl-symbol-macrolet` failed
to advise `macroexpand-1` the way it advised `macroexpand`.

To fix this, we change `cl-symbol-macrolet` so it advises both, and we
do that with a new `macroexpand` advice which delegates the bulk of
the work to `macroexpand-1`.

Along the way, I bumped into another bug in the interaction between
`cl-letf` and `cl-symbol-macrolet`, which I tried to fix in `cl-letf`.

I hear the war on `cl-symbol-macrolet` was a failure.
Maybe ... just say no?

* lisp/emacs-lisp/cl-macs.el (cl--sm-macroexpand-1): New function,
extracted from `cl--sm-macroexpand`.
(cl--sm-macroexpand): Rewrite completely.
(cl-symbol-macrolet): Advise both `macroexpand` and `macroexpand-1`.
(cl--letf): Don't use the "simple variable" code for symbol macros.

* test/lisp/emacs-lisp/cl-lib-tests.el (cl-lib-symbol-macrolet-hide):
Revert last change because the test was right.

* test/lisp/emacs-lisp/cl-macs-tests.el
(cl-macs-test--symbol-macrolet): Add a test case.
lisp/emacs-lisp/cl-macs.el
test/lisp/emacs-lisp/cl-lib-tests.el
test/lisp/emacs-lisp/cl-macs-tests.el