0.pre7.137:
[sbcl.git] / src / code / float-trap.lisp
index caadeaf..5723d47 100644 (file)
@@ -33,9 +33,9 @@
 ;;; Return a mask with all the specified float trap bits set.
 (defun float-trap-mask (names)
   (reduce #'logior
-         (mapcar #'(lambda (x)
-                     (or (cdr (assoc x *float-trap-alist*))
-                         (error "unknown float trap kind: ~S" x)))
+         (mapcar (lambda (x)
+                   (or (cdr (assoc x *float-trap-alist*))
+                       (error "unknown float trap kind: ~S" x)))
                  names)))
 ) ; EVAL-WHEN
 
   (flet ((exc-keys (bits)
           (macrolet ((frob ()
                        `(collect ((res))
-                          ,@(mapcar #'(lambda (x)
-                                        `(when (logtest bits ,(cdr x))
-                                           (res ',(car x))))
+                          ,@(mapcar (lambda (x)
+                                      `(when (logtest bits ,(cdr x))
+                                         (res ',(car x))))
                                     *float-trap-alist*)
                           (res))))
             (frob))))
 
 ;;; Signal the appropriate condition when we get a floating-point error.
 (defun sigfpe-handler (signal info context)
-  (declare (ignore signal info))
+  (declare (ignore signal info context))
   (declare (type system-area-pointer context))
   ;; FIXME: The find-the-detailed-problem code below went stale with
   ;; the big switchover to POSIX signal handling and signal contexts
-  ;; which are opaque at the Lisp level ca plod-0.6.7. It needs to be
+  ;; which are opaque at the Lisp level ca. sbcl-0.6.7. It needs to be
   ;; revived, which will require writing a C-level os-dependent
   ;; function to extract floating point modes, and a Lisp-level
-  ;; DEF-ALIEN-ROUTINE to get to the C-level os-dependent function.
+  ;; DEFINE-ALIEN-ROUTINE to get to the C-level os-dependent function.
   ;; Meanwhile we just say "something went wrong".
   (error 'floating-point-exception)
   #|
        (exceptions (dpb (float-trap-mask traps) float-sticky-bits 0))
        (trap-mask (dpb (lognot (float-trap-mask traps))
                        float-traps-byte #xffffffff))
-       (exception-mask (dpb (lognot (sb!vm::float-trap-mask traps))
-                            float-sticky-bits #xffffffff)))
-    `(let ((orig-modes (floating-point-modes)))
+       (exception-mask (dpb (lognot (float-trap-mask traps))
+                            float-sticky-bits #xffffffff))
+        (orig-modes (gensym)))
+    `(let ((,orig-modes (floating-point-modes)))
       (unwind-protect
           (progn
             (setf (floating-point-modes)
-                  (logand orig-modes ,(logand trap-mask exception-mask)))
+                  (logand ,orig-modes ,(logand trap-mask exception-mask)))
             ,@body)
        ;; Restore the original traps and exceptions.
        (setf (floating-point-modes)
-             (logior (logand orig-modes ,(logior traps exceptions))
+             (logior (logand ,orig-modes ,(logior traps exceptions))
                      (logand (floating-point-modes)
                              ,(logand trap-mask exception-mask))))))))