mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-06 06:20:55 -08:00
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.
This commit is contained in:
parent
9219e83b3c
commit
2a78f06ef4
3 changed files with 141 additions and 137 deletions
|
|
@ -552,7 +552,14 @@ collection clause."
|
|||
x)
|
||||
x))
|
||||
(error err))
|
||||
'(1 7 3))))
|
||||
'(1 7 3)))
|
||||
(should (equal
|
||||
(let ((x (list 42)))
|
||||
(cl-symbol-macrolet ((m (car x)))
|
||||
(list m
|
||||
(cl-letf ((m 5)) m)
|
||||
m)))
|
||||
'(42 5 42))))
|
||||
|
||||
(ert-deftest cl-macs-loop-conditional-step-clauses ()
|
||||
"These tests failed under the initial fixes in #bug#29799."
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue