X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Ftarget-sxhash.lisp;h=571b9c184cec137cf6b9f7d4561c23fb8cb360b7;hb=cd13034f9415f64cdaa05893a4ac5ff1e95c97bd;hp=3df7c3d7172467405e5ef36e48039bf197d71ca7;hpb=b870615b146940f661e5d0e9069ca4e16e9f483d;p=sbcl.git diff --git a/src/code/target-sxhash.lisp b/src/code/target-sxhash.lisp index 3df7c3d..571b9c1 100644 --- a/src/code/target-sxhash.lisp +++ b/src/code/target-sxhash.lisp @@ -63,12 +63,10 @@ ;; algorithms, but we're not pushing them hard enough here for them ;; to be cryptographically strong.) (let* ((xy (+ (* x 3) y))) - (declare (type (unsigned-byte 32) xy)) - (the (and fixnum unsigned-byte) - (logand most-positive-fixnum - (logxor 441516657 - xy - (the fixnum (ash xy -5))))))) + (logand most-positive-fixnum + (logxor 441516657 + xy + (ash xy -5))))) ;;;; hashing strings ;;;; @@ -84,11 +82,12 @@ (declare (type index count)) (let ((result 408967240)) (declare (type fixnum result)) - (dotimes (i count) - (declare (type index i)) - (mixf result - (the fixnum - (ash (char-code (aref string i)) 5)))) + (unless (typep string '(vector nil)) + (dotimes (i count) + (declare (type index i)) + (mixf result + (the fixnum + (ash (char-code (aref string i)) 5))))) result)) ;;; test: ;;; (let ((ht (make-hash-table :test 'equal))) @@ -144,7 +143,7 @@ (sxhash-recurse (cdr x) (1- depthoid))) 261835505)) (instance - (if (typep x 'structure-object) + (if (or (typep x 'structure-object) (typep x 'condition)) (logxor 422371266 (sxhash ; through DEFTRANSFORM (classoid-name