Function: rx--sequence
rx--sequence is a byte-compiled function defined in rx.el.gz.
Signature
(rx--sequence LEFT RIGHT)
Documentation
Return the sequence (concatenation) of two translated items, each on the form (REGEXP . PRECEDENCE), returning (REGEXP . PRECEDENCE).
Source Code
;; Defined in /usr/src/emacs/lisp/emacs-lisp/rx.el.gz
(defun rx--sequence (left right)
"Return the sequence (concatenation) of two translated items,
each on the form (REGEXP . PRECEDENCE), returning (REGEXP . PRECEDENCE)."
;; Concatenation rules:
;; seq ++ seq -> seq
;; lseq ++ seq -> lseq
;; seq ++ rseq -> rseq
;; lseq ++ rseq -> nil
(cond ((not (car left)) right)
((not (car right)) left)
(t
(let ((l (if (memq (cdr left) '(nil rseq))
(cons (rx--bracket (car left)) t)
left))
(r (if (memq (cdr right) '(nil lseq))
(cons (rx--bracket (car right)) t)
right)))
(cons (append (car l) (car r))
(if (eq (cdr l) 'lseq)
(if (eq (cdr r) 'rseq)
nil ; lseq ++ rseq
'lseq) ; lseq ++ seq
(if (eq (cdr r) 'rseq)
'rseq ; seq ++ rseq
'seq))))))) ; seq ++ seq