X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Farray-tran.lisp;h=05e57ab33c496e9c0f4ca899d11b9963b2ce2898;hb=b19093fa94d6e1785abee99c35c9a610e8777671;hp=2e222349d5fdbcaf27a30a589ed137059079a062;hpb=1ff04b3ba4e6f3a0fc6ceea524e98720ecea7888;p=sbcl.git diff --git a/src/compiler/array-tran.lisp b/src/compiler/array-tran.lisp index 2e22234..05e57ab 100644 --- a/src/compiler/array-tran.lisp +++ b/src/compiler/array-tran.lisp @@ -108,7 +108,7 @@ (unsupplied-or-nil fill-pointer)))) (specifier-type `(,(if simple 'simple-array 'array) - ,(cond ((not element-type) 't) + ,(cond ((not element-type) t) ((constant-continuation-p element-type) (continuation-value element-type)) (t @@ -425,13 +425,19 @@ ;;;; array accessors +;;; FIXME: This was commented out in sbcl-0.6.9.21 since it was +;;; causing a problem in a CHAR form in HEXSTR. It's still important +;;; to be able to inline this, so something along these lines +;;; will probably be back, but it might be different in detail, e.g. +;;; (DECLAIM (MAYBE-INLINE %WITH-ARRAY-DATA)). +#| ;;; Handle the 1-dimensional case of %WITH-ARRAY-DATA specially. It's ;;; important to do this efficiently if we want people to be able to ;;; use vectors with fill pointers anywhere near inner loops, and ;;; hence it's important to do this efficiently if we want people to ;;; be able to use sequence functions anywhere near inner loops. (deftransform %with-array-data ((array start end) - (vector index index) + (vector index (or index null)) * :important t :node node @@ -441,11 +447,6 @@ (element-type-specifier (type-specifier element-ctype)) (simple-array-type `(simple-array ,element-type-specifier 1))) (declare (type ctype element-ctype)) - #| - (when (eq element-type-specifier '*) - (give-up-ir1-transform - "upgraded array element type not known at compile time")) - |# `(let* (;; FIXME: Instead of doing this hairy expression for SIZE, ;; it should just be (ARRAY-DIMENSION ARRAY 0), and there ;; should be a DEFTRANSFORM for ARRAY-DIMENSION which @@ -477,6 +478,7 @@ (error "The start of vector data was out of range.")) (defun vector-data-end-out-of-range () (error "The end of vector data was out of range.")) +|# ;;; We convert all typed array accessors into AREF and %ASET with type ;;; assertions on the array.