[cmucl-cvs] CMUCL commit: src/code (hash-new.lisp)
Raymond Toy
rtoy at common-lisp.net
Wed Aug 11 17:40:10 UTC 2010
Date: Wednesday, August 11, 2010 @ 13:40:10
Author: rtoy
Path: /project/cmucl/cvsroot/src/code
Modified: hash-new.lisp
Trying to has a NaN causes an error. Don't add zero if it's a NaN.
---------------+
hash-new.lisp | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
Index: src/code/hash-new.lisp
diff -u src/code/hash-new.lisp:1.54 src/code/hash-new.lisp:1.55
--- src/code/hash-new.lisp:1.54 Tue Apr 20 13:57:44 2010
+++ src/code/hash-new.lisp Wed Aug 11 13:40:09 2010
@@ -5,7 +5,7 @@
;;; Carnegie Mellon University, and has been placed in the public domain.
;;;
(ext:file-comment
- "$Header: /project/cmucl/cvsroot/src/code/hash-new.lisp,v 1.54 2010-04-20 17:57:44 rtoy Exp $")
+ "$Header: /project/cmucl/cvsroot/src/code/hash-new.lisp,v 1.55 2010-08-11 17:40:09 rtoy Exp $")
;;;
;;; **********************************************************************
;;;
@@ -1016,13 +1016,19 @@
(single-float
;; CLHS says sxhash must return the same thing for +0.0 and
;; -0.0. We get the desired result by adding +0.0, which
- ;; converts -0.0 to 0.0.
- (let* ((x (+ s-expr 0f0))
+ ;; converts -0.0 to 0.0. But if s-expr is NaN, we don't want
+ ;; to signal an error from adding 0, so don't do it since it
+ ;; we don't need to anyway.
+ (let* ((x (if (float-nan-p s-expr)
+ s-expr
+ (+ s-expr 0f0)))
(bits (single-float-bits x)))
(ldb sxhash-bits-byte
(logxor (ash bits (- sxmash-rotate-bits)) bits))))
(double-float
- (let* ((x (+ s-expr 0d0))
+ (let* ((x (if (float-nan-p s-expr)
+ s-expr
+ (+ s-expr 0d0)))
(lo (double-float-low-bits x))
(hi (double-float-high-bits x)))
(ldb sxhash-bits-byte
More information about the cmucl-cvs
mailing list