0.pre7.122:
[sbcl.git] / src / code / array.lisp
index 62452a5..8adb473 100644 (file)
 
 (eval-when (:compile-toplevel :execute)
   (sb!xc:defmacro pick-vector-type (type &rest specs)
-    `(cond ,@(mapcar #'(lambda (spec)
-                        `(,(if (eq (car spec) t)
+    `(cond ,@(mapcar (lambda (spec)
+                      `(,(if (eq (car spec) t)
                              t
                              `(subtypep ,type ',(car spec)))
-                          ,@(cdr spec)))
+                        ,@(cdr spec)))
                     specs))))
 
 ;;; These functions are used in the implementation of MAKE-ARRAY for
@@ -75,7 +75,7 @@
 ;;; MAKE-ARRAY for any non-simple array. Thus, there's some value to
 ;;; making this somewhat efficient, at least not doing full calls to
 ;;; SUBTYPEP in the easy cases.
-(defun %vector-type-code (type)
+(defun %vector-widetag-and-n-bits (type)
   (case type
     ;; Pick off some easy common cases.
     ;;
@@ -84,9 +84,9 @@
     ;; on smarter compiler transforms which do the calculation once
     ;; and for all in any reasonable user programs.)
     ((t)
-     (values #.sb!vm:simple-vector-widetag #.sb!vm:word-bits))
+     (values #.sb!vm:simple-vector-widetag #.sb!vm:n-word-bits))
     ((character base-char standard-char)
-     (values #.sb!vm:simple-string-widetag #.sb!vm:byte-bits))
+     (values #.sb!vm:simple-string-widetag #.sb!vm:n-byte-bits))
     ((bit)
      (values #.sb!vm:simple-bit-vector-widetag 1))
     ;; OK, we have to wade into SUBTYPEPing after all.
@@ -94,7 +94,7 @@
      ;; FIXME: The data here are redundant with
      ;; *SPECIALIZED-ARRAY-ELEMENT-TYPE-PROPERTIES*.
      (pick-vector-type type
-       (base-char (values #.sb!vm:simple-string-widetag #.sb!vm:byte-bits))
+       (base-char (values #.sb!vm:simple-string-widetag #.sb!vm:n-byte-bits))
        (bit (values #.sb!vm:simple-bit-vector-widetag 1))
        ((unsigned-byte 2)
        (values #.sb!vm:simple-array-unsigned-byte-2-widetag 2))
        (values #.sb!vm:simple-array-complex-long-float-widetag
                #!+x86 192
                #!+sparc 256))
-       (t (values #.sb!vm:simple-vector-widetag #.sb!vm:word-bits))))))
-(defun %complex-vector-type-code (type)
+       (t (values #.sb!vm:simple-vector-widetag #.sb!vm:n-word-bits))))))
+(defun %complex-vector-widetag (type)
   (case type
     ;; Pick off some easy common cases.
     ((t)
       (error "can't specify :DISPLACED-INDEX-OFFSET without :DISPLACED-TO"))
     (if (and simple (= array-rank 1))
        ;; Its a (simple-array * (*))
-       (multiple-value-bind (type bits) (%vector-type-code element-type)
+       (multiple-value-bind (type n-bits)
+           (%vector-widetag-and-n-bits element-type)
          (declare (type (unsigned-byte 8) type)
-                  (type (integer 1 256) bits))
+                  (type (integer 1 256) n-bits))
          (let* ((length (car dimensions))
                 (array (allocate-vector
                         type
                         (ceiling (* (if (= type sb!vm:simple-string-widetag)
                                         (1+ length)
                                         length)
-                                    bits)
-                                 sb!vm:word-bits))))
+                                    n-bits)
+                                 sb!vm:n-word-bits))))
            (declare (type index length))
            (when initial-element-p
              (fill array initial-element))
                (error "can't specify both :INITIAL-ELEMENT and ~
                :INITIAL-CONTENTS"))
              (unless (= length (length initial-contents))
-               (error "There are ~D elements in the :INITIAL-CONTENTS, but ~
-                      the vector length is ~D."
+               (error "There are ~W elements in the :INITIAL-CONTENTS, but ~
+                      the vector length is ~W."
                       (length initial-contents)
                       length))
              (replace array initial-contents))
                          initial-contents initial-element initial-element-p)))
               (array (make-array-header
                       (cond ((= array-rank 1)
-                             (%complex-vector-type-code element-type))
+                             (%complex-vector-widetag element-type))
                             (simple sb!vm:simple-array-widetag)
                             (t sb!vm:complex-array-widetag))
                       array-rank)))
                            (unless (and (fixnump fill-pointer)
                                         (>= fill-pointer 0)
                                         (<= fill-pointer length))
-                                   (error "invalid fill-pointer ~D"
-                                          fill-pointer))
+                             ;; FIXME: should be TYPE-ERROR?
+                             (error "invalid fill-pointer ~W"
+                                    fill-pointer))
                            fill-pointer))))
                 (setf (%array-fill-pointer-p array) t))
                (t
                     (t
                      (unless (typep contents 'sequence)
                        (error "malformed :INITIAL-CONTENTS: ~S is not a ~
-                               sequence, but ~D more layer~:P needed."
+                               sequence, but ~W more layer~:P needed."
                               contents
                               (- (length dimensions) axis)))
                      (unless (= (length contents) (car dims))
                        (error "malformed :INITIAL-CONTENTS: Dimension of ~
-                               axis ~D is ~D, but ~S is ~D long."
+                               axis ~W is ~W, but ~S is ~W long."
                               axis (car dims) contents (length contents)))
                      (if (listp contents)
                          (dolist (content contents)
           (list subscripts))
   (let ((rank (array-rank array)))
     (unless (= rank (length subscripts))
-      (error "wrong number of subscripts, ~D, for array of rank ~D"
+      (error "wrong number of subscripts, ~W, for array of rank ~W"
             (length subscripts) rank))
     (if (array-header-p array)
        (do ((subs (nreverse subscripts) (cdr subs))
            (declare (fixnum index dim))
            (unless (< -1 index dim)
              (if invalid-index-error-p
-                 (error "invalid index ~D~[~;~:; on axis ~:*~D~] in ~S"
+                 (error "invalid index ~W~[~;~:; on axis ~:*~W~] in ~S"
                         index axis array)
                  (return-from %array-row-major-index nil)))
            (incf result (* chunk-size index))
        (let ((index (first subscripts)))
          (unless (< -1 index (length (the (simple-array * (*)) array)))
            (if invalid-index-error-p
-               (error "invalid index ~D in ~S" index array)
+               (error "invalid index ~W in ~S" index array)
                (return-from %array-row-major-index nil)))
          index))))
 
 (defun array-element-type (array)
   #!+sb-doc
   "Return the type of the elements of the array"
-  (let ((type (get-type array)))
+  (let ((widetag (widetag-of array)))
     (macrolet ((pick-element-type (&rest stuff)
-                `(cond ,@(mapcar #'(lambda (stuff)
-                                     (cons
-                                      (let ((item (car stuff)))
-                                        (cond ((eq item t)
-                                               t)
-                                              ((listp item)
-                                               (cons 'or
-                                                     (mapcar #'(lambda (x)
-                                                                 `(= type ,x))
-                                                             item)))
-                                              (t
-                                               `(= type ,item))))
-                                      (cdr stuff)))
-                                                  stuff))))
+                `(cond ,@(mapcar (lambda (stuff)
+                                   (cons
+                                    (let ((item (car stuff)))
+                                      (cond ((eq item t)
+                                             t)
+                                            ((listp item)
+                                             (cons 'or
+                                                   (mapcar (lambda (x)
+                                                             `(= widetag ,x))
+                                                           item)))
+                                            (t
+                                             `(= widetag ,item))))
+                                    (cdr stuff)))
+                                 stuff))))
       ;; FIXME: The data here are redundant with
       ;; *SPECIALIZED-ARRAY-ELEMENT-TYPE-PROPERTIES*.
       (pick-element-type
           (error "Vector axis is not zero: ~S" axis-number))
         (length (the (simple-array * (*)) array)))
        ((>= axis-number (%array-rank array))
-        (error "~D is too big; ~S only has ~D dimension~:P."
+        (error "Axis number ~W is too big; ~S only has ~D dimension~:P."
                axis-number array (%array-rank array)))
        (t
         (%array-dimension array axis-number))))
 
 (defun zap-array-data-aux (old-data old-dims offset new-data new-dims)
   (declare (fixnum offset))
-  (let ((limits (mapcar #'(lambda (x y)
-                           (declare (fixnum x y))
-                           (1- (the fixnum (min x y))))
+  (let ((limits (mapcar (lambda (x y)
+                         (declare (fixnum x y))
+                         (1- (the fixnum (min x y))))
                        old-dims new-dims)))
     (macrolet ((bump-index-list (index limits)
                 `(do ((subscripts ,index (cdr subscripts))