diff options
-rw-r--r-- | lisp/emacs-lisp/pcase.el | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/lisp/emacs-lisp/pcase.el b/lisp/emacs-lisp/pcase.el index 4b7689ad42c..a8ce23284c4 100644 --- a/lisp/emacs-lisp/pcase.el +++ b/lisp/emacs-lisp/pcase.el @@ -698,10 +698,15 @@ MATCH is the pattern that needs to be matched, of the form: (dolist (binding (pcase--fgrep bindings (pop sexp))) (push binding res) (setq bindings (remove binding bindings)))) - (let ((tmp (assq sexp bindings))) - (if tmp - (cons tmp res) - res)))) + (if (vectorp sexp) + ;; With backquote, code can appear within vectors as well. + ;; This wouldn't be needed if we `macroexpand-all' before + ;; calling pcase--fgrep, OTOH. + (pcase--fgrep bindings (mapcar #'identity sexp)) + (let ((tmp (assq sexp bindings))) + (if tmp + (cons tmp res) + res))))) (defun pcase--self-quoting-p (upat) (or (keywordp upat) (integerp upat) (stringp upat))) |