]> git.eshelyaron.com Git - emacs.git/commitdiff
* lisp/emacs-lisp/pcase.el (pcase--split-match, pcase--app-subst-match):
authorStefan Monnier <monnier@iro.umontreal.ca>
Sat, 27 Sep 2014 04:24:06 +0000 (00:24 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Sat, 27 Sep 2014 04:24:06 +0000 (00:24 -0400)
Handle the case where `match' is :pcase--succeed or :pcase--fail.

Fixes: debbugs:18554
lisp/ChangeLog
lisp/emacs-lisp/pcase.el

index e43bace2a66d652c95030063ff77583c8c439da9..146dda5b9cd4b6e6a30a1ea0ee7a799d443aa788 100644 (file)
@@ -1,5 +1,9 @@
 2014-09-27  Stefan Monnier  <monnier@iro.umontreal.ca>
 
+       * 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.
index ddcd4040f2bcd12c1edf6ab78a8fd7b9d8b353d3..753cd3005e637d2c1b9ec3be52d044f63a32b3e7 100644 (file)
@@ -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)