Fix COND for clauses with length 1
authorStrigoides <Strigoides@gmail.com>
Fri, 26 Apr 2013 12:49:02 +0000 (00:49 +1200)
committerStrigoides <Strigoides@gmail.com>
Fri, 26 Apr 2013 12:49:02 +0000 (00:49 +1200)
(COND (1)) should return 1

src/boot.lisp
tests/conditionals.lisp

index 40ae705..d30fb79 100644 (file)
   (if (null clausules)
       nil
       (if (eq (caar clausules) t)
-          `(progn ,@(cdar clausules))
-          `(if ,(caar clausules)
-               (progn ,@(cdar clausules))
-               (cond ,@(cdr clausules))))))
+        `(progn ,@(cdar clausules))
+        `(if ,(caar clausules)
+           ,(if (null (cdar clausules))
+              (caar clausules)
+              `(progn ,@(cdar clausules)))
+           (cond ,@(cdr clausules))))))
 
 (defmacro case (form &rest clausules)
   (let ((!form (gensym)))
index 9a73dc5..693fbba 100644 (file)
@@ -8,6 +8,7 @@
 
 ; COND
 (test (eql nil (cond)))
+(test (=   1   (cond (1))))
 (test (=   2   (cond (1 2))))
 (test (=   3   (cond (nil 1) (2 3))))
 (test (eql nil (cond (nil 1) (nil 2))))