Commit 528872c5 authored by Stefan Monnier's avatar Stefan Monnier

* 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
parent e6cfa098
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.
......
......@@ -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)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment