0.8.2.3:
authorAlexey Dejneka <adejneka@comail.ru>
Sun, 27 Jul 2003 15:05:31 +0000 (15:05 +0000)
committerAlexey Dejneka <adejneka@comail.ru>
Sun, 27 Jul 2003 15:05:31 +0000 (15:05 +0000)
        * Fixed bug reported by Kalle Olavi Niemitalo on Debian CMUCL
          BTS: MAKE-ARRAY ignored :INITIAL-CONTENTS NIL.

NEWS
src/code/array.lisp
src/compiler/checkgen.lisp
tests/array.pure.lisp
version.lisp-expr

diff --git a/NEWS b/NEWS
index 39d85a8..2b719d8 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1941,9 +1941,11 @@ changes in sbcl-0.8.3 relative to sbcl-0.8.2:
   * bug fix: WITH-OUTPUT-TO-STRING (and MAKE-STRING-OUTPUT-STREAM) now
     accept and act upon their :ELEMENT-TYPE keyword argument.
     (reported by Edi Weitz)
-  * bug fix: FILE-POSITION now accepts position designators up to 
-    ARRAY-DIMENSION-LIMIT or the extreme of the off_t range, whichever 
+  * bug fix: FILE-POSITION now accepts position designators up to
+    ARRAY-DIMENSION-LIMIT or the extreme of the off_t range, whichever
     is the greater.  (thanks to Patrik Nordebo)
+  * bug fix: MAKE-ARRAY ignored :INITIAL-CONTENTS NIL. (reported by
+    Kalle Olavi Niemitalo)
 
 planned incompatible changes in 0.8.x:
   * (not done yet, but planned:) When the profiling interface settles
index c8e0c86..6e46a9d 100644 (file)
 (defun make-array (dimensions &key
                              (element-type t)
                              (initial-element nil initial-element-p)
-                             initial-contents adjustable fill-pointer
+                             (initial-contents nil initial-contents-p)
+                              adjustable fill-pointer
                              displaced-to displaced-index-offset)
   (let* ((dimensions (if (listp dimensions) dimensions (list dimensions)))
         (array-rank (length (the list dimensions)))
            (declare (type index length))
            (when initial-element-p
              (fill array initial-element))
-           (when initial-contents
-             (when initial-element
+           (when initial-contents-p
+             (when initial-element-p
                (error "can't specify both :INITIAL-ELEMENT and ~
                :INITIAL-CONTENTS"))
              (unless (= length (length initial-contents))
               (data (or displaced-to
                         (data-vector-from-inits
                          dimensions total-size element-type
-                         initial-contents initial-element initial-element-p)))
+                         initial-contents initial-contents-p
+                          initial-element initial-element-p)))
               (array (make-array-header
                       (cond ((= array-rank 1)
                              (%complex-vector-widetag element-type))
          (setf (%array-available-elements array) total-size)
          (setf (%array-data-vector array) data)
          (cond (displaced-to
-                (when (or initial-element-p initial-contents)
+                (when (or initial-element-p initial-contents-p)
                   (error "Neither :INITIAL-ELEMENT nor :INITIAL-CONTENTS ~
                   can be specified along with :DISPLACED-TO"))
                 (let ((offset (or displaced-index-offset 0)))
 ;;; to FILL-DATA-VECTOR for error checking on the structure of
 ;;; initial-contents.
 (defun data-vector-from-inits (dimensions total-size element-type
-                              initial-contents initial-element
-                              initial-element-p)
-  (when (and initial-contents initial-element-p)
+                              initial-contents initial-contents-p
+                               initial-element initial-element-p)
+  (when (and initial-contents-p initial-element-p)
     (error "cannot supply both :INITIAL-CONTENTS and :INITIAL-ELEMENT to
            either MAKE-ARRAY or ADJUST-ARRAY."))
   (let ((data (if initial-element-p
               (error "~S cannot be used to initialize an array of type ~S."
                      initial-element element-type))
             (fill (the vector data) initial-element)))
-         (initial-contents
+         (initial-contents-p
           (fill-data-vector data dimensions initial-contents)))
     data))
 
 (defun adjust-array (array dimensions &key
                           (element-type (array-element-type array))
                           (initial-element nil initial-element-p)
-                          initial-contents fill-pointer
+                          (initial-contents nil initial-contents-p)
+                           fill-pointer
                           displaced-to displaced-index-offset)
   #!+sb-doc
   "Adjust ARRAY's dimensions to the given DIMENSIONS and stuff."
       (declare (fixnum array-rank))
       (when (and fill-pointer (> array-rank 1))
        (error "Multidimensional arrays can't have fill pointers."))
-      (cond (initial-contents
+      (cond (initial-contents-p
             ;; array former contents replaced by INITIAL-CONTENTS
             (if (or initial-element-p displaced-to)
                 (error "INITIAL-CONTENTS may not be specified with ~
             (let* ((array-size (apply #'* dimensions))
                    (array-data (data-vector-from-inits
                                 dimensions array-size element-type
-                                initial-contents initial-element
-                                initial-element-p)))
+                                initial-contents initial-contents-p
+                                 initial-element initial-element-p)))
               (if (adjustable-array-p array)
                   (set-array-header array array-data array-size
                                 (get-new-fill-pointer array array-size
                        (setf new-data
                              (data-vector-from-inits
                               dimensions new-length element-type
-                              initial-contents initial-element
-                              initial-element-p))
+                              initial-contents initial-contents-p
+                               initial-element initial-element-p))
                        (replace new-data old-data
                                 :start2 old-start :end2 old-end))
                       (t (setf new-data
                                         (> new-length old-length))
                                     (data-vector-from-inits
                                      dimensions new-length
-                                     element-type () initial-element
-                                     initial-element-p)
+                                     element-type () nil
+                                      initial-element initial-element-p)
                                     old-data)))
                   (if (or (zerop old-length) (zerop new-length))
                       (when initial-element-p (fill new-data initial-element))
index 4958c90..5313441 100644 (file)
     (do-blocks (block component)
       (when (block-type-check block)
        (do-nodes (node cont block)
-          (when (cast-p node)
-            (when (cast-type-check node)
-              (cast-check-uses node))
+          (when (and (cast-p node)
+                     (cast-type-check node))
+            (cast-check-uses node)
             (cond ((worth-type-check-p node)
                    (casts (cons node (not (probable-type-check-p node)))))
                   (t
index 60eb661..023e170 100644 (file)
   ;; dimensions that we promised.  Let's make sure that we can create
   ;; an array with more than 2^24 elements, since that was a symptom
   ;; from the CLISP and OpenMCL hosts.
-  (let ((big-array (opaque-identity 
+  (let ((big-array (opaque-identity
                    (make-array (expt 2 26) :element-type 'bit))))
-    (assert (= (length big-array) (expt 2 26)))))
\ No newline at end of file
+    (assert (= (length big-array) (expt 2 26)))))
+
+;;; Bug reported by Kalle Olavi Niemitalo for CMUCL through Debian BTS
+(let ((array (make-array nil :initial-contents nil)))
+  (assert (eql (aref array) nil)))
index 3a7afaa..865410d 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".)
-"0.8.2.2"
+"0.8.2.3"