1.0.28.41: make MAKE-ARRAY transforms co-operate with FILL better
authorNikodemus Siivola <nikodemus@random-state.net>
Tue, 12 May 2009 09:11:39 +0000 (09:11 +0000)
committerNikodemus Siivola <nikodemus@random-state.net>
Tue, 12 May 2009 09:11:39 +0000 (09:11 +0000)
  When the transform for FILL fires, and the type of initial-element
  has not yet been propagated, so VECTOR-FILL* fires instead of a more
  specific transform (which currently exist only for
  SIMPLE-BASE-STRINGs and SIMPLE-BIT-VECTORs.)

  Annotate the type with THE and the SAETP-SPECIFIER so the most
  specific transform can fire.

  Reported by Stas Boukarev.

src/compiler/array-tran.lisp
version.lisp-expr

index 1aeb26e..899b43e 100644 (file)
            `(let ((array ,creation-form))
              (multiple-value-bind (vector)
                  (%data-vector-and-index array 0)
-               (fill vector initial-element))
+               (fill vector (the ,(sb!vm:saetp-specifier saetp) initial-element)))
              array)))))
 
 ;;; The integer type restriction on the length ensures that it will be
index 2f60e45..0eec54d 100644 (file)
@@ -17,4 +17,4 @@
 ;;; checkins which aren't released. (And occasionally for internal
 ;;; versions, especially for internal versions off the main CVS
 ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"1.0.28.40"
+"1.0.28.41"