* lisp/emacs-lisp/pcase.el (pcase--split-equal, pcase--split-member):

Beware signals raised by predicates.

Fixes: debbugs:16201
This commit is contained in:
Stefan Monnier 2014-01-02 23:40:30 -05:00
parent ba05e912ae
commit 6f5475834a
2 changed files with 23 additions and 16 deletions

View file

@ -1,9 +1,14 @@
2014-01-03 Stefan Monnier <monnier@iro.umontreal.ca>
* emacs-lisp/pcase.el (pcase--split-equal, pcase--split-member):
Beware signals raised by predicates (bug#16201).
2014-01-02 Richard Stallman <rms@gnu.org> 2014-01-02 Richard Stallman <rms@gnu.org>
* dired-aux.el (dired-do-print): Handle printer-name. * dired-aux.el (dired-do-print): Handle printer-name.
* mail/rmailmm.el (rmail-mime-message-p): Moved to rmail.el. * mail/rmailmm.el (rmail-mime-message-p): Move to rmail.el.
* mail/rmail.el (rmail-mime-message-p): Moved from rmailmm.el. * mail/rmail.el (rmail-mime-message-p): Move from rmailmm.el.
(rmail-epa-decrypt): Turn off mime processing. (rmail-epa-decrypt): Turn off mime processing.
* mail/rmail.el (rmail-make-in-reply-to-field): * mail/rmail.el (rmail-make-in-reply-to-field):
@ -65,8 +70,8 @@
2013-12-28 João Távora <joaotavora@gmail.com> 2013-12-28 João Távora <joaotavora@gmail.com>
* elec-pair.el (electric-pair-post-self-insert-function): Don't * elec-pair.el (electric-pair-post-self-insert-function):
open extra newlines at beginning of buffer. (Bug#16272) Don't open extra newlines at beginning of buffer. (Bug#16272)
2013-12-28 Eli Zaretskii <eliz@gnu.org> 2013-12-28 Eli Zaretskii <eliz@gnu.org>

View file

@ -461,9 +461,10 @@ MATCH is the pattern that needs to be matched, of the form:
((and (eq (car-safe pat) 'pred) ((and (eq (car-safe pat) 'pred)
(symbolp (cadr pat)) (symbolp (cadr pat))
(get (cadr pat) 'side-effect-free)) (get (cadr pat) 'side-effect-free))
(ignore-errors
(if (funcall (cadr pat) elem) (if (funcall (cadr pat) elem)
'(:pcase--succeed . nil) '(:pcase--succeed . nil)
'(:pcase--fail . nil))))) '(:pcase--fail . nil))))))
(defun pcase--split-member (elems pat) (defun pcase--split-member (elems pat)
;; Based on pcase--split-equal. ;; Based on pcase--split-equal.
@ -484,10 +485,11 @@ MATCH is the pattern that needs to be matched, of the form:
((and (eq (car-safe pat) 'pred) ((and (eq (car-safe pat) 'pred)
(symbolp (cadr pat)) (symbolp (cadr pat))
(get (cadr pat) 'side-effect-free) (get (cadr pat) 'side-effect-free)
(ignore-errors
(let ((p (cadr pat)) (all t)) (let ((p (cadr pat)) (all t))
(dolist (elem elems) (dolist (elem elems)
(unless (funcall p elem) (setq all nil))) (unless (funcall p elem) (setq all nil)))
all)) all)))
'(:pcase--succeed . nil)))) '(:pcase--succeed . nil))))
(defun pcase--split-pred (vars upat pat) (defun pcase--split-pred (vars upat pat)