Commit 0e4dd67a authored by Stefan Monnier's avatar Stefan Monnier

* lisp/emacs-lisp/seq.el: Don't require cl-lib.

(seq-subseq): Move cl-subseq's code here instyead of calling it.
* lisp/emacs-lisp/cl-extra.el (cl-subseq): Use seq-subseq.
parent 2aaced16
Pipeline #3832 failed with stage
in 90 minutes and 2 seconds
......@@ -38,6 +38,7 @@
;;; Code:
(require 'cl-lib)
(require 'seq)
;;; Type coercion.
......@@ -549,26 +550,7 @@ too large if positive or too small if negative)."
(macroexp-let2 nil new new
`(progn (cl-replace ,seq ,new :start1 ,start :end1 ,end)
,new)))))
(cond ((or (stringp seq) (vectorp seq)) (substring seq start end))
((listp seq)
(let (len
(errtext (format "Bad bounding indices: %s, %s" start end)))
(and end (< end 0) (setq end (+ end (setq len (length seq)))))
(if (< start 0) (setq start (+ start (or len (setq len (length seq))))))
(unless (>= start 0)
(error "%s" errtext))
(when (> start 0)
(setq seq (nthcdr (1- start) seq))
(or seq (error "%s" errtext))
(setq seq (cdr seq)))
(if end
(let ((res nil))
(while (and (>= (setq end (1- end)) start) seq)
(push (pop seq) res))
(or (= (1+ end) start) (error "%s" errtext))
(nreverse res))
(copy-sequence seq))))
(t (error "Unsupported sequence: %s" seq))))
(seq-subseq seq start end))
;;;###autoload
(defun cl-concatenate (type &rest sequences)
......
......@@ -57,7 +57,6 @@
;;; Code:
(eval-when-compile (require 'cl-generic))
(require 'cl-lib) ;; for cl-subseq
(defmacro seq-doseq (spec &rest body)
"Loop over a sequence.
......@@ -151,7 +150,27 @@ If END is omitted, it defaults to the length of the sequence. If
START or END is negative, it counts from the end. Signal an
error if START or END are outside of the sequence (i.e too large
if positive or too small if negative)."
(cl-subseq sequence start end))
(cond
((or (stringp sequence) (vectorp sequence)) (substring sequence start end))
((listp sequence)
(let (len
(errtext (format "Bad bounding indices: %s, %s" start end)))
(and end (< end 0) (setq end (+ end (setq len (length sequence)))))
(if (< start 0) (setq start (+ start (or len (setq len (length sequence))))))
(unless (>= start 0)
(error "%s" errtext))
(when (> start 0)
(setq sequence (nthcdr (1- start) sequence))
(or sequence (error "%s" errtext))
(setq sequence (cdr sequence)))
(if end
(let ((res nil))
(while (and (>= (setq end (1- end)) start) sequence)
(push (pop sequence) res))
(or (= (1+ end) start) (error "%s" errtext))
(nreverse res))
(copy-sequence sequence))))
(t (error "Unsupported sequence: %s" sequence))))
(cl-defgeneric seq-map (function sequence)
......
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