From b877afdfd37d7cdf13ce60c6dc2186d5a0141724 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Sun, 18 Feb 2018 13:02:29 -0500 Subject: [PATCH] * lisp/progmodes/elisp-mode.el (eval-sexp-add-defvars): Don't macroexpand. Otherwise it breaks C-M-x on (progn (defmacro x ..) (... (x ...))). Furthermore, many callers do their own macroexpansion anyway. (elisp--eval-last-sexp): Do macroexpansion to make up for it. --- lisp/progmodes/elisp-mode.el | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lisp/progmodes/elisp-mode.el b/lisp/progmodes/elisp-mode.el index e6e55a37a7c..935e55c5d70 100644 --- a/lisp/progmodes/elisp-mode.el +++ b/lisp/progmodes/elisp-mode.el @@ -1132,7 +1132,9 @@ character)." (eval-expression-get-print-arguments eval-last-sexp-arg-internal))) ;; Setup the lexical environment if lexical-binding is enabled. (elisp--eval-last-sexp-print-value - (eval (eval-sexp-add-defvars (elisp--preceding-sexp)) lexical-binding) + (eval (macroexpand-all + (eval-sexp-add-defvars (elisp--preceding-sexp))) + lexical-binding) (if insert-value (current-buffer) t) no-truncate char-print-limit))) (defun elisp--eval-last-sexp-print-value @@ -1165,7 +1167,6 @@ character)." (defun eval-sexp-add-defvars (exp &optional pos) "Prepend EXP with all the `defvar's that precede it in the buffer. POS specifies the starting position where EXP was found and defaults to point." - (setq exp (macroexpand-all exp)) ;Eager macro-expansion. (if (not lexical-binding) exp (save-excursion -- 2.39.2