Function: pcase--split-match
pcase--split-match is a byte-compiled function defined in pcase.el.gz.
Signature
(pcase--split-match SYM SPLITTER MATCH)
Source Code
;; Defined in /usr/src/emacs/lisp/emacs-lisp/pcase.el.gz
(defun pcase--split-match (sym splitter match)
(cond
((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-safe match) '(or and))
(let ((then-alts '())
(else-alts '())
(neutral-elem (if (eq 'or (car match))
:pcase--fail :pcase--succeed))
(zero-elem (if (eq 'or (car match)) :pcase--succeed :pcase--fail)))
(dolist (alt (cdr match))
(let ((split (pcase--split-match sym splitter alt)))
(unless (eq (car split) neutral-elem)
(push (car split) then-alts))
(unless (eq (cdr split) neutral-elem)
(push (cdr split) else-alts))))
(cons (cond ((memq zero-elem then-alts) zero-elem)
((null then-alts) neutral-elem)
((null (cdr then-alts)) (car then-alts))
(t (cons (car match) (nreverse then-alts))))
(cond ((memq zero-elem else-alts) zero-elem)
((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 "Unknown MATCH %s" match))))