X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fsxhash.lisp;h=abe819914608f56f306eb9b8aca75add0e8ca4c1;hb=cd1b14acf6f548b28b8a14e554d779f0473122ec;hp=53431b29cee7c309a05d9b3cfdc21092a854c916;hpb=4898ef32c639b1c7f4ee13a5ba566ce6debd03e6;p=sbcl.git diff --git a/src/code/sxhash.lisp b/src/code/sxhash.lisp index 53431b2..abe8199 100644 --- a/src/code/sxhash.lisp +++ b/src/code/sxhash.lisp @@ -53,11 +53,10 @@ ((= length 0) (mix result (sxhash 0))) (t (mixf result (sxhash (length x))) - (do* ((i sb!vm:vector-data-offset (+ i 1)) + (do* ((i 0 (+ i 1)) ;; FIXME: should we respect DEPTHOID? SXHASH on ;; strings doesn't seem to... - (end-1 (+ sb!vm:vector-data-offset - (floor (1- length) sb!vm:n-word-bits)))) + (end-1 (floor (1- length) sb!vm:n-word-bits))) ((= i end-1) (let ((num (logand @@ -67,14 +66,14 @@ (:big-endian '(- sb!vm:n-word-bits (mod length sb!vm:n-word-bits))))) - (%raw-bits x i)))) + (%vector-raw-bits x i)))) (mix result ,(ecase sb!c:*backend-byte-order* (:little-endian '(logand num most-positive-fixnum)) (:big-endian '(ash num (- sb!vm:n-lowtag-bits))))))) (declare (type index i end-1)) - (let ((num (%raw-bits x i))) + (let ((num (%vector-raw-bits x i))) (mixf result ,(ecase sb!c:*backend-byte-order* (:little-endian '(logand num most-positive-fixnum)) @@ -129,3 +128,9 @@ (%set-symbol-hash x sxhash) sxhash) result))))) + +(deftransform psxhash ((x &optional depthoid) (character &optional t)) + `(char-code (char-upcase x))) + +(deftransform psxhash ((x &optional depthoid) (integer &optional t)) + `(sxhash x))