summaryrefslogtreecommitdiffstats
path: root/stdlib
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib')
-rw-r--r--stdlib/ifa.tl17
1 files changed, 9 insertions, 8 deletions
diff --git a/stdlib/ifa.tl b/stdlib/ifa.tl
index e2c35f14..c16d8345 100644
--- a/stdlib/ifa.tl
+++ b/stdlib/ifa.tl
@@ -69,15 +69,16 @@
(defmacro whena (test . body)
^(ifa ,test (progn ,*body)))
-(defun sys:if-to-cond (f if-oper cond-oper pairs)
- (tree-case pairs
- (((test . forms) . rest) ^(,if-oper ,test (progn ,*forms)
- (,cond-oper ,*rest)))
- (() ())
- (else (compile-error f "bad syntax: ~s" else))))
+(defun sys:if-to-cond (f if-oper pairs)
+ (with-gensyms (res)
+ ^(let (,res)
+ (or ,*(collect-each ((c pairs))
+ (mac-param-bind f (test . forms) c
+ ^(,if-oper ,test (progn (set ,res (progn ,*forms)) t)))))
+ ,res)))
(defmacro conda (:form f . pairs)
- (sys:if-to-cond f 'ifa 'conda pairs))
+ (sys:if-to-cond f 'ifa pairs))
(defmacro condlet (:form f . pairs)
- (sys:if-to-cond f 'iflet 'condlet pairs))
+ (sys:if-to-cond f 'iflet pairs))