From: Stefan Monnier Date: Sat, 27 Sep 2014 04:24:06 +0000 (-0400) Subject: * lisp/emacs-lisp/pcase.el (pcase--split-match, pcase--app-subst-match): X-Git-Tag: emacs-25.0.90~2635^2~679^2~209 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=528872c5f87d0edb38befe96a5eb0ab3f27db76d;p=emacs.git * lisp/emacs-lisp/pcase.el (pcase--split-match, pcase--app-subst-match): Handle the case where `match' is :pcase--succeed or :pcase--fail. Fixes: debbugs:18554 --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index e43bace2a66..146dda5b9cd 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,9 @@ 2014-09-27 Stefan Monnier + * emacs-lisp/pcase.el (pcase--split-match, pcase--app-subst-match): + Handle the case where `match' is :pcase--succeed or :pcase--fail + (bug#18554). + Introduce global-eldoc-mode. Move Elisp-specific code to elisp-mode.el. * emacs-lisp/eldoc.el (global-eldoc-mode): New minor mode. (eldoc-schedule-timer): Obey it. diff --git a/lisp/emacs-lisp/pcase.el b/lisp/emacs-lisp/pcase.el index ddcd4040f2b..753cd3005e6 100644 --- a/lisp/emacs-lisp/pcase.el +++ b/lisp/emacs-lisp/pcase.el @@ -435,12 +435,12 @@ MATCH is the pattern that needs to be matched, of the form: (defun pcase--split-match (sym splitter match) (cond - ((eq (car match) 'match) + ((eq (car-safe match) 'match) (if (not (eq sym (cadr match))) (cons match match) (let ((res (funcall splitter (cddr match)))) (cons (or (car res) match) (or (cdr res) match))))) - ((memq (car match) '(or and)) + ((memq (car-safe match) '(or and)) (let ((then-alts '()) (else-alts '()) (neutral-elem (if (eq 'or (car match)) @@ -460,6 +460,7 @@ MATCH is the pattern that needs to be matched, of the form: ((null else-alts) neutral-elem) ((null (cdr else-alts)) (car else-alts)) (t (cons (car match) (nreverse else-alts))))))) + ((memq match '(:pcase--succeed :pcase--fail)) (cons match match)) (t (error "Uknown MATCH %s" match)))) (defun pcase--split-rest (sym splitter rest) @@ -570,17 +571,18 @@ MATCH is the pattern that needs to be matched, of the form: (defun pcase--app-subst-match (match sym fun nsym) (cond - ((eq (car match) 'match) + ((eq (car-safe match) 'match) (if (and (eq sym (cadr match)) (eq 'app (car-safe (cddr match))) (equal fun (nth 1 (cddr match)))) (pcase--match nsym (nth 2 (cddr match))) match)) - ((memq (car match) '(or and)) + ((memq (car-safe match) '(or and)) `(,(car match) ,@(mapcar (lambda (match) (pcase--app-subst-match match sym fun nsym)) (cdr match)))) + ((memq match '(:pcase--succeed :pcase--fail)) match) (t (error "Uknown MATCH %s" match)))) (defun pcase--app-subst-rest (rest sym fun nsym)