From: Stefan Monnier Date: Fri, 14 Jan 2022 17:26:30 +0000 (-0500) Subject: (macroexp--expand-all): Fix bug#53227 and bug#46636 X-Git-Tag: emacs-29.0.90~3050 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=d29291d665e808307126bf52c3e748fef78f0f9c;p=emacs.git (macroexp--expand-all): Fix bug#53227 and bug#46636 * lisp/emacs-lisp/macroexp.el (macroexp--expand-all): Don't mis-expand invalid funcalls. --- diff --git a/lisp/emacs-lisp/macroexp.el b/lisp/emacs-lisp/macroexp.el index b44917f7d56..33ce55a3de8 100644 --- a/lisp/emacs-lisp/macroexp.el +++ b/lisp/emacs-lisp/macroexp.el @@ -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)))