]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix bug #41618 "(byte-compile 'foo) errors when foo is a macro."
authorAlan Mackenzie <acm@muc.de>
Sun, 31 May 2020 16:46:06 +0000 (16:46 +0000)
committerAlan Mackenzie <acm@muc.de>
Sun, 31 May 2020 16:46:06 +0000 (16:46 +0000)
* lisp/emacs-lisp/bytecomp.el (byte-compile): Disentangle the eval of the
final form from the pushing of 'macro onto it, doing the former first.

lisp/emacs-lisp/bytecomp.el

index 688f8cfa4db24dee2843c9e2aad3741261eea335..5479e6536a370f7b3bf81b0cd90c719aff6173d0 100644 (file)
@@ -2796,14 +2796,15 @@ If FORM is a lambda or a macro, byte-compile it as a function."
         ;; Expand macros.
         (setq fun (byte-compile-preprocess fun))
         (setq fun (byte-compile-top-level fun nil 'eval))
-        (if macro (push 'macro fun))
         (if (symbolp form)
             ;; byte-compile-top-level returns an *expression* equivalent to the
             ;; `fun' expression, so we need to evaluate it, tho normally
             ;; this is not needed because the expression is just a constant
             ;; byte-code object, which is self-evaluating.
-            (fset form (eval fun t))
-          fun)))))))
+            (setq fun (eval fun t)))
+        (if macro (push 'macro fun))
+        (if (symbolp form) (fset form fun))
+        fun))))))
 
 (defun byte-compile-sexp (sexp)
   "Compile and return SEXP."