1.0.12.13: sequence optimizations: SUBSEQ, part 3
[sbcl.git] / src / code / seq.lisp
index a5173aa..cefc59b 100644 (file)
                     (end end)
                     :check-fill-pointer t
                     :force-inline t)
-    (let ((copy (%make-sequence-like sequence (- end start))))
+    (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))
-        (setf (aref copy new-index)
-              (aref data old-index))))))
+        (funcall setter copy new-index
+                 (funcall reffer data old-index))))))
 
 (defun list-subseq* (sequence start end)
   (declare (type list sequence)