X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Ftarget-sxhash.lisp;h=cbc226771e99e40e4632dfe870a24a574ccf1f9e;hb=3fe0010d2777b41e01ea9b4a0f894cfa40f7df1b;hp=df0ec1200e7e251374332dd0227ef1cf2910145b;hpb=78fa16bf55be44cc16845be84d98023e83fb14bc;p=sbcl.git diff --git a/src/code/target-sxhash.lisp b/src/code/target-sxhash.lisp index df0ec12..cbc2267 100644 --- a/src/code/target-sxhash.lisp +++ b/src/code/target-sxhash.lisp @@ -164,7 +164,7 @@ (mixf result (sxhash-number (realpart x))) (mixf result (sxhash-number (imagpart x))) result)))) - (sxhash-recurse (x &optional (depthoid +max-hash-depthoid+)) + (sxhash-recurse (x depthoid) (declare (type index depthoid)) (typecase x ;; we test for LIST here, rather than CONS, because the @@ -209,7 +209,7 @@ (number (sxhash-number x)) (generic-function (sxhash-instance x)) (t 42)))) - (sxhash-recurse x))) + (sxhash-recurse x +max-hash-depthoid+))) ;;;; the PSXHASH function @@ -289,13 +289,16 @@ (name (classoid-name classoid)) (result (mix (sxhash name) (the fixnum 79867)))) (declare (type fixnum result)) - (dotimes (i (min depthoid (1- length))) + (dotimes (i (min depthoid (- length 1 (layout-n-untagged-slots layout)))) (declare (type fixnum i)) (let ((j (1+ i))) ; skipping slot #0, which is for LAYOUT (declare (type fixnum j)) (mixf result (psxhash (%instance-ref key j) (1- depthoid))))) + ;; KLUDGE: Should hash untagged slots, too. (Although +max-hash-depthoid+ + ;; is pretty low currently, so they might not make it into the hash + ;; value anyway.) result)) (defun list-psxhash (key depthoid)