0.8.7.52:
[sbcl.git] / src / code / target-sxhash.lisp
index 3df7c3d..571b9c1 100644 (file)
   ;; 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)))))
 \f
 ;;;; hashing strings
 ;;;;
   (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)))
                         (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