X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fseq.lisp;h=4c801406d9ba33da2892ce1ed173b6367a53dbb2;hb=8735f137435f1a90c05df67a03e48602a79572f8;hp=d4026d3de4288af7523d0993f0545cd74092a883;hpb=be2e8599a25b1a21fac40d963ec71820b74cf3f3;p=sbcl.git diff --git a/src/code/seq.lisp b/src/code/seq.lisp index d4026d3..4c80140 100644 --- a/src/code/seq.lisp +++ b/src/code/seq.lisp @@ -1383,7 +1383,7 @@ (= number-zapped count)) (do ((index index (,bump index)) (new-index new-index (,bump new-index))) - ((= index (the fixnum ,right)) (shrink-vector result new-index)) + ((= index (the fixnum ,right)) (%shrink-vector result new-index)) (declare (fixnum index new-index)) (setf (aref result new-index) (aref sequence index)))) (declare (fixnum index new-index number-zapped)) @@ -1665,7 +1665,7 @@ (setf (aref result jndex) (aref vector index)) (setq index (1+ index)) (setq jndex (1+ jndex))) - (shrink-vector result jndex))) + (%shrink-vector result jndex))) (define-sequence-traverser remove-duplicates (sequence &key test test-not start end from-end key) @@ -1726,8 +1726,7 @@ (do ((index index (1+ index)) ; copy the rest of the vector (jndex jndex (1+ jndex))) ((= index length) - (shrink-vector vector jndex) - vector) + (shrink-vector vector jndex)) (setf (aref vector jndex) (aref vector index)))) (declare (fixnum index jndex)) (setf (aref vector jndex) (aref vector index)) @@ -2387,3 +2386,12 @@ (seq-dispatch sequence2 (list-search sequence2 sequence1) (vector-search sequence2 sequence1)))) + +(sb!xc:defmacro string-dispatch ((&rest types) var &body body) + (let ((fun (gensym "STRING-DISPATCH-FUN-"))) + `(flet ((,fun (,var) + ,@body)) + (declare (inline ,fun)) + (etypecase ,var + ,@(loop for type in types + collect `(,type (,fun (the ,type ,var))))))))