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.
(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))
((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)
(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)