branch: elpa/macrostep
commit 0b04a89f698c335c9ea492553470a8d45c113edd
Author: Torbjörn Norinder <torbj...@genunix.se>
Commit: Jonas Bernoulli <jo...@bernoul.li>

    macrostep-collect-macro-forms: conditionally override macroexpand-1
    
    As of Emacs commit ca4bc9baf9d2c861ad776da07e56381da8e3722a,
    macroexpand-1 is used by macroexpand-all rather than macroexpand.
    
    Also see #9.
---
 macrostep.el | 52 ++++++++++++++++++++++++++++++----------------------
 1 file changed, 30 insertions(+), 22 deletions(-)

diff --git a/macrostep.el b/macrostep.el
index 4a00a603f7..56b9dfe6a2 100644
--- a/macrostep.el
+++ b/macrostep.el
@@ -942,28 +942,36 @@ corresponding local environments are collected for these.
 Forms and environments are extracted from FORM by instrumenting
 Emacs's builtin `macroexpand' function and calling
 `macroexpand-all'."
-  (let ((real-macroexpand (indirect-function #'macroexpand))
-        (macro-form-alist '())
-        (compiler-macro-forms '()))
-    (cl-letf
-        (((symbol-function #'macroexpand)
-          (lambda (form environment &rest args)
-            (let ((expansion
-                   (apply real-macroexpand form environment args)))
-              (cond ((not (eq expansion form))
-                     (setq macro-form-alist
-                           (cons (cons form environment)
-                                 macro-form-alist)))
-                    ((and (consp form)
-                          (symbolp (car form))
-                          macrostep-expand-compiler-macros
-                          (not (eq form
-                                   (cl-compiler-macroexpand form))))
-                     (setq compiler-macro-forms
-                           (cons form compiler-macro-forms))))
-              expansion))))
-      (ignore-errors
-        (macroexpand-all form environment)))
+  (let* ((macro-form-alist '())
+         (compiler-macro-forms '())
+         (override (lambda (real-macroexpand form environment &rest args)
+                     (let ((expansion
+                            (apply real-macroexpand form environment args)))
+                       (cond ((not (eq expansion form))
+                              (setq macro-form-alist
+                                    (cons (cons form environment)
+                                          macro-form-alist)))
+                             ((and (consp form)
+                                   (symbolp (car form))
+                                   macrostep-expand-compiler-macros
+                                   (not (eq form
+                                            (cl-compiler-macroexpand form))))
+                              (setq compiler-macro-forms
+                                    (cons form compiler-macro-forms))))
+                       expansion))))
+    (cl-macrolet ((with-override (fn &rest body)
+                    `(cl-letf (((symbol-function ,fn)
+                                (apply-partially override (indirect-function 
,fn))))
+                       ,@body))
+                  (with-macroexpand-1 (&rest body)
+                    (if (< emacs-major-version 30)
+                        `(progn ,@body) `(with-override #'macroexpand-1 
,@body)))
+                  (with-macroexpand (&rest body)
+                    `(with-override #'macroexpand ,@body)))
+      (with-macroexpand-1
+       (with-macroexpand
+        (ignore-errors
+          (macroexpand-all form environment)))))
     (list macro-form-alist compiler-macro-forms)))
 
 (defvar macrostep-collected-macro-form-alist nil

Reply via email to