related to the ~@F format directive.
* fixed bug: SET-SYNTAX-FROM-CHAR correctly shallow-copies a
dispatch table if the from-char is a dispatch macro character.
+ * fixed bug: COUNT and EQUAL on bit vectors with lengths divisible
+ by the wordsize no longer ignore the last word. (reported by Lutz
+ Euler)
* fixed some bugs related to Unicode integration:
** portions of multibyte characters at the end of buffers for
character-based file input are correctly transferred to the
(end-1 (+ sb!vm:vector-data-offset
(floor (1- length) sb!vm:n-word-bits))))
((= i end-1)
- (let* ((extra (mod length sb!vm:n-word-bits))
+ (let* ((extra (1+ (mod (1- length) sb!vm:n-word-bits)))
(mask (1- (ash 1 extra)))
(numx
(logand
(:big-endian
'(- sb!vm:n-word-bits extra))))
(%raw-bits y i))))
- (declare (type (mod #.sb!vm:n-word-bits)
- extra)
+ (declare (type (integer 1 #.sb!vm:n-word-bits) extra)
(type sb!vm:word mask numx numy))
(= numx numy)))
(declare (type index i end-1))
(truncate (truly-the index (1- length))
sb!vm:n-word-bits))))
((= index end-1)
- (let* ((extra (mod length sb!vm:n-word-bits))
+ (let* ((extra (1+ (mod (1- length) sb!vm:n-word-bits)))
(mask (1- (ash 1 extra)))
(bits (logand (ash mask
,(ecase sb!c:*backend-byte-order*
(:big-endian
'(- sb!vm:n-word-bits extra))))
(%raw-bits sequence index))))
- (declare (type (mod #.sb!vm:n-word-bits) extra))
+ (declare (type (integer 1 #.sb!vm:n-word-bits) extra))
(declare (type sb!vm:word mask bits))
;; could consider LOGNOT for the zero case instead of
;; doing the subtraction...
(funcall f array1)
(setf (aref array2 i) v)
(assert (equal array1 array2))))))
+
+(let ((fn (compile nil '(lambda (x)
+ (declare (type bit x))
+ (declare (optimize speed))
+ (let ((b (make-array 64 :element-type 'bit
+ :initial-element 0)))
+ (count x b))))))
+ (assert (= (funcall fn 0) 64))
+ (assert (= (funcall fn 1) 0)))
+
+(let ((fn (compile nil '(lambda (x y)
+ (declare (type simple-bit-vector x y))
+ (declare (optimize speed))
+ (equal x y)))))
+ (assert (funcall
+ fn
+ (make-array 64 :element-type 'bit :initial-element 0)
+ (make-array 64 :element-type 'bit :initial-element 0)))
+ (assert (not
+ (funcall
+ fn
+ (make-array 64 :element-type 'bit :initial-element 0)
+ (let ((b (make-array 64 :element-type 'bit :initial-element 0)))
+ (setf (sbit b 63) 1)
+ b)))))
+
+
\ No newline at end of file
;;; 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.19.7"
+"0.8.19.8"