Avoid dobule evaluation of IS-FALSE's argument
authorMarco Baringer <mb@bese.it>
Tue, 26 Jun 2007 10:54:43 +0000 (12:54 +0200)
committerMarco Baringer <mb@bese.it>
Tue, 26 Jun 2007 10:54:43 +0000 (12:54 +0200)
src/check.lisp

index c2f4ee7..cdf57fd 100644 (file)
@@ -229,13 +229,16 @@ REASON-ARGS is provided, is generated based on the form of TEST:
   failure otherwise. Like IS-TRUE, and unlike IS, IS-FALSE does
   not inspect CONDITION to determine what reason to give it case
   of test failure"
-  `(if ,condition
-    (process-failure
-     :reason ,(if reason-args
-                  `(format nil ,@reason-args)
-                  `(format nil "~S returned a true value" ',condition))
-     :test-expr ',condition)
-    (add-result 'test-passed :test-expr ',condition)))
+  
+  (with-unique-names (value)
+    `(let ((,value ,condition))
+       (if ,value
+           (process-failure
+            :reason ,(if reason-args
+                         `(format nil ,@reason-args)
+                         `(format nil "~S returned the value ~S, which is true" ',condition ,value ))
+            :test-expr ',condition)
+           (add-result 'test-passed :test-expr ',condition)))))
 
 (defmacro signals (condition-spec
                    &body body)