projects
/
sbcl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
0.8.4:
[sbcl.git]
/
src
/
code
/
target-sxhash.lisp
diff --git
a/src/code/target-sxhash.lisp
b/src/code/target-sxhash.lisp
index
0b65801
..
571b9c1
100644
(file)
--- 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)))
;; 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
;;;;
\f
;;;; hashing strings
;;;;
@@
-84,11
+82,12
@@
(declare (type index count))
(let ((result 408967240))
(declare (type fixnum result))
(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)))
result))
;;; test:
;;; (let ((ht (make-hash-table :test 'equal)))
@@
-144,10
+143,11
@@
(sxhash-recurse (cdr x) (1- depthoid)))
261835505))
(instance
(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
(logxor 422371266
(sxhash ; through DEFTRANSFORM
- (class-name (layout-class (%instance-layout x)))))
+ (classoid-name
+ (layout-classoid (%instance-layout x)))))
(sxhash-instance x)))
(symbol (sxhash x)) ; through DEFTRANSFORM
(array
(sxhash-instance x)))
(symbol (sxhash x)) ; through DEFTRANSFORM
(array
@@
-247,8
+247,8
@@
(declare (type (integer 0 #.+max-hash-depthoid+) depthoid))
(let* ((layout (%instance-layout key)) ; i.e. slot #0
(length (layout-length layout))
(declare (type (integer 0 #.+max-hash-depthoid+) depthoid))
(let* ((layout (%instance-layout key)) ; i.e. slot #0
(length (layout-length layout))
- (class (layout-class layout))
- (name (class-name class))
+ (classoid (layout-classoid layout))
+ (name (classoid-name classoid))
(result (mix (sxhash name) (the fixnum 79867))))
(declare (type fixnum result))
(dotimes (i (min depthoid (1- length)))
(result (mix (sxhash name) (the fixnum 79867))))
(declare (type fixnum result))
(dotimes (i (min depthoid (1- length)))
@@
-313,7
+313,7
@@
(etypecase key
(single-float (frob single-float))
(double-float (frob double-float))
(etypecase key
(single-float (frob single-float))
(double-float (frob double-float))
- (short-float (frob short-float))
+ #!+long-float
(long-float (error "LONG-FLOAT not currently supported")))))
(rational (if (and (<= most-negative-double-float
key
(long-float (error "LONG-FLOAT not currently supported")))))
(rational (if (and (<= most-negative-double-float
key