]> git.eshelyaron.com Git - emacs.git/commitdiff
Define macroexpand-1 for older Emacsen
authorJohn Wiegley <johnw@newartisans.com>
Sun, 3 Dec 2017 18:33:12 +0000 (10:33 -0800)
committerJohn Wiegley <johnw@newartisans.com>
Sun, 3 Dec 2017 18:33:12 +0000 (10:33 -0800)
test/lisp/use-package/use-package-tests.el

index 5cf7a342b36a3ef135990485f3c7617c5cf47ece..fc9c0f184b670caa246c0146293cc7931d1d402e 100644 (file)
       max-lisp-eval-depth 8000
       max-specpdl-size 8000)
 
+(unless (fboundp 'macroexpand-1)
+  (defun macroexpand-1 (form &optional environment)
+    "Perform (at most) one step of macroexpansion."
+    (cond
+     ((consp form)
+      (let* ((head (car form))
+             (env-expander (assq head environment)))
+        (if env-expander
+            (if (cdr env-expander)
+                (apply (cdr env-expander) (cdr form))
+              form)
+          (if (not (and (symbolp head) (fboundp head)))
+              form
+            (let ((def (autoload-do-load (symbol-function head) head 'macro)))
+              (cond
+               ;; Follow alias, but only for macros, otherwise we may end up
+               ;; skipping an important compiler-macro (e.g. cl--block-wrapper).
+               ((and (symbolp def) (macrop def)) (cons def (cdr form)))
+               ((not (consp def)) form)
+               (t
+                (if (eq 'macro (car def))
+                    (apply (cdr def) (cdr form))
+                  form))))))))
+     (t form))))
+
 (defmacro expand-minimally (form)
   `(let ((use-package-verbose 'errors)
          (use-package-expand-minimally t))