]> git.eshelyaron.com Git - emacs.git/commitdiff
(macroexp--expand-all): Fix bug#53227 and bug#46636
authorStefan Monnier <monnier@iro.umontreal.ca>
Fri, 14 Jan 2022 17:26:30 +0000 (12:26 -0500)
committerStefan Monnier <monnier@iro.umontreal.ca>
Fri, 14 Jan 2022 17:26:30 +0000 (12:26 -0500)
* lisp/emacs-lisp/macroexp.el (macroexp--expand-all): Don't mis-expand
invalid funcalls.

lisp/emacs-lisp/macroexp.el

index b44917f7d56b67e4c75f821c310a88b7299e477e..33ce55a3de8f53c95cc163fe17439f2cca661c0e 100644 (file)
@@ -366,14 +366,18 @@ Assumes the caller has bound `macroexpand-all-environment'."
                              form)
           (macroexp--expand-all newform))))
 
-      (`(funcall . ,(or `(,exp . ,args) pcase--dontcare))
+      (`(funcall ,exp . ,args)
        (let ((eexp (macroexp--expand-all exp))
              (eargs (macroexp--all-forms args)))
          ;; Rewrite (funcall #'foo bar) to (foo bar), in case `foo'
          ;; has a compiler-macro, or to unfold it.
          (pcase eexp
-           (`#',f (macroexp--expand-all `(,f . ,eargs)))
+           ((and `#',f
+                 (guard (not (or (special-form-p f) (macrop f)))));; bug#46636
+            (macroexp--expand-all `(,f . ,eargs)))
            (_ `(funcall ,eexp . ,eargs)))))
+      (`(funcall . ,_) form)            ;bug#53227
+
       (`(,func . ,_)
        (let ((handler (function-get func 'compiler-macro))
              (funargs (function-get func 'funarg-positions)))