X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Farray.lisp;h=6d6ae8c6452f15d44da98e71bbd84ebd75fff73e;hb=25fe91bf63fd473d9316675b0e0ca9be0079e9eb;hp=29d54a20bc8c428c9879193355936b0174f05f63;hpb=eb4a67799308fc2e610ca330401c9cb07533143c;p=sbcl.git diff --git a/src/code/array.lisp b/src/code/array.lisp index 29d54a2..6d6ae8c 100644 --- a/src/code/array.lisp +++ b/src/code/array.lisp @@ -149,6 +149,11 @@ (declare (fixnum array-rank)) (when (and displaced-index-offset (null displaced-to)) (error "can't specify :DISPLACED-INDEX-OFFSET without :DISPLACED-TO")) + (when (and displaced-to + (arrayp displaced-to) + (not (equal (array-element-type displaced-to) + (upgraded-array-element-type element-type)))) + (error "Array element type of :DISPLACED-TO array does not match specified element type")) (if (and simple (= array-rank 1)) ;; it's a (SIMPLE-ARRAY * (*)) (multiple-value-bind (type n-bits) @@ -764,7 +769,11 @@ of specialized arrays is supported." (error "The number of dimensions not equal to rank of array.")) ((not (subtypep element-type (array-element-type array))) (error "The new element type, ~S, is incompatible with old type." - element-type))) + element-type)) + ((and fill-pointer (not (array-has-fill-pointer-p array))) + (error 'type-error + :datum array + :expected-type '(satisfies array-has-fill-pointer-p)))) (let ((array-rank (length (the list dimensions)))) (declare (fixnum array-rank)) (unless (= array-rank 1) @@ -975,7 +984,13 @@ of specialized arrays is supported." ;;;; ZAP-ARRAY-DATA for ADJUST-ARRAY ;;; a temporary to be used when OLD-DATA and NEW-DATA are EQ. -;;; KLUDGE: Boy, DYNAMIC-EXTENT would be nice. +;;; KLUDGE: Boy, DYNAMIC-EXTENT would be nice. This is rebound +;;; to length zero array in each new thread. +;;; +;;; DX is probably a bad idea, because a with a big array it would +;;; be fairly easy to blow the stack. +;;; +;;; Rebound per thread. (defvar *zap-array-data-temp* (make-array 1000 :initial-element t)) (defun zap-array-data-temp (length element-type initial-element