X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Ffop.lisp;fp=src%2Fcode%2Ffop.lisp;h=f7bb13b6cae9e81211c06b15ecb05aeb9160c158;hb=3a2377d9ab3389ddfacdeb425f81c4df820d8e7c;hp=44e512ddc6c9c261fe6c17c1f2b3bc162ab1c4bf;hpb=b2ed34b667665e52609cf431c00179b136be450d;p=sbcl.git diff --git a/src/code/fop.lisp b/src/code/fop.lisp index 44e512d..f7bb13b 100644 --- a/src/code/fop.lisp +++ b/src/code/fop.lisp @@ -412,26 +412,29 @@ res)) (defglobal **saetp-bits-per-length** - (let ((array (make-array 255 :element-type '(unsigned-byte 8) - :initial-element 255))) + (let ((array (make-array (1+ sb!vm:widetag-mask) + :element-type '(unsigned-byte 8) + :initial-element 255))) (loop for saetp across sb!vm:*specialized-array-element-type-properties* do (setf (aref array (sb!vm:saetp-typecode saetp)) (sb!vm:saetp-n-bits saetp))) array) "255 means bad entry.") -(declaim (type (simple-array (unsigned-byte 8) (255)) +(declaim (type (simple-array (unsigned-byte 8) (#.(1+ sb!vm:widetag-mask))) **saetp-bits-per-length**)) (define-fop (fop-spec-vector 43) (let* ((length (read-word-arg)) (widetag (read-byte-arg)) (bits-per-length (aref **saetp-bits-per-length** widetag)) - (bytes (progn - (aver (< bits-per-length 255)) - (ceiling (* length bits-per-length) sb!vm:n-byte-bits))) - (vector (allocate-vector widetag length (* bytes sb!vm:n-word-bytes)))) - (declare (type index length)) + (bits (progn (aver (< bits-per-length 255)) + (* length bits-per-length))) + (bytes (ceiling bits sb!vm:n-byte-bits)) + (words (ceiling bytes sb!vm:n-word-bytes)) + (vector (allocate-vector widetag length words))) + (declare (type index length bytes words) + (type word bits)) (read-n-bytes *fasl-input-stream* vector 0 bytes) vector))