X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fseq.lisp;h=d3e88e086ccb94dad0e0e916adf13941d6bf3243;hb=fb2d28ba0ccab2afb9e68b4de722ba2179bcea8e;hp=d37da2c4196a2eda6f7506c86cfd632d6ee253d2;hpb=40bff32181a4d9b591ae2bac69bbee3bd77a82bc;p=sbcl.git diff --git a/src/code/seq.lisp b/src/code/seq.lisp index d37da2c..d3e88e0 100644 --- a/src/code/seq.lisp +++ b/src/code/seq.lisp @@ -377,38 +377,17 @@ ;;;; so we worry about dealing with END being supplied or defaulting ;;;; to NIL at this level. -(defun string-subseq* (sequence start end) - (with-array-data ((data sequence) - (start start) - (end end) - :force-inline t - :check-fill-pointer t) - (declare (optimize (speed 3) (safety 0))) - (string-dispatch ((simple-array character (*)) - (simple-array base-char (*)) - (vector nil)) - data - (subseq data start end)))) - (defun vector-subseq* (sequence start end) (declare (type vector sequence)) (declare (type index start) - (type (or null index) end)) + (type (or null index) end) + (optimize speed)) (with-array-data ((data sequence) (start start) (end end) :check-fill-pointer t :force-inline t) - (let* ((copy (%make-sequence-like sequence (- end start))) - (setter (!find-data-vector-setter copy)) - (reffer (!find-data-vector-reffer data))) - (declare (optimize (speed 3) (safety 0))) - (do ((old-index start (1+ old-index)) - (new-index 0 (1+ new-index))) - ((= old-index end) copy) - (declare (index old-index new-index)) - (funcall setter copy new-index - (funcall reffer data old-index)))))) + (funcall (!find-vector-subseq-fun data) data start end))) (defun list-subseq* (sequence start end) (declare (type list sequence)