X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Ftarget-sxhash.lisp;h=74e739baa23400c84b231d4ad71ae5d2354e8b74;hb=c960f8bc221ef4db0058013b8aa992d9b5a73fb7;hp=0b65801e738c64a2384863f5f269dcc181579ca9;hpb=a3ab89c1db0dd9bfb911532ca134be16f16c4c1b;p=sbcl.git diff --git a/src/code/target-sxhash.lisp b/src/code/target-sxhash.lisp index 0b65801..74e739b 100644 --- a/src/code/target-sxhash.lisp +++ b/src/code/target-sxhash.lisp @@ -84,11 +84,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,10 +145,11 @@ (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 - (class-name (layout-class (%instance-layout x))))) + (classoid-name + (layout-classoid (%instance-layout x))))) (sxhash-instance x))) (symbol (sxhash x)) ; through DEFTRANSFORM (array @@ -247,8 +249,8 @@ (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))) @@ -313,7 +315,7 @@ (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