X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fseqtran.lisp;h=e7c0da32dc712564e577c5894d37ebb6c6530203;hb=4ae1b794a5d6a90794468cf8017f5307f2c30dfe;hp=b10fd2ef7e90e853cd6f4031336dfb0732601c8f;hpb=86210c4e406c1b2ff10cc3bac0e71435867db48b;p=sbcl.git diff --git a/src/compiler/seqtran.lisp b/src/compiler/seqtran.lisp index b10fd2e..e7c0da3 100644 --- a/src/compiler/seqtran.lisp +++ b/src/compiler/seqtran.lisp @@ -293,17 +293,22 @@ :policy (> speed space)) "open code" (let ((element-type (upgraded-element-type-specifier-or-give-up seq))) - `(with-array-data ((data seq) - (start start) - (end end)) + (values + `(with-array-data ((data seq) + (start start) + (end end)) (declare (type (simple-array ,element-type 1) data)) + (declare (type fixnum start end)) (do ((i start (1+ i))) ((= i end) seq) (declare (type index i)) ;; WITH-ARRAY-DATA did our range checks once and for all, so - ;; it'd be wasteful to check again on every AREF. + ;; it'd be wasteful to check again on every AREF... (declare (optimize (safety 0))) - (setf (aref data i) item))))) + (setf (aref data i) item))) + ;; ... though we still need to check that the new element can fit + ;; into the vector in safe code. -- CSR, 2002-07-05 + `((declare (type ,element-type item)))))) ;;;; utilities @@ -611,7 +616,7 @@ ;;; use that here, so that the compiler is born knowing this value. ;;; FIXME: Add a comment telling whether this holds for all vectors ;;; or only for vectors based on simple arrays (non-adjustable, etc.). -(defconstant vector-data-bit-offset +(def!constant vector-data-bit-offset (* sb!vm:vector-data-offset sb!vm:n-word-bits)) ;;; FIXME: Shouldn't we be testing for legality of @@ -647,6 +652,7 @@ ;;; %CONCATENATE (with a DEFTRANSFORM to translate constant RTYPE to ;;; CTYPE before calling %CONCATENATE) which is comparably efficient, ;;; at least once DYNAMIC-EXTENT works. +#+nil ; FIXME: currently commented out because of bug 188 (deftransform concatenate ((rtype &rest sequences) (t &rest simple-string) simple-string) @@ -655,7 +661,7 @@ (all-lengths) (args)) (dolist (seq sequences) - (declare (ignore seq)) + (declare (ignorable seq)) (let ((n-seq (gensym)) (n-length (gensym))) (args n-seq)