summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--lib.c14
2 files changed, 14 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index ed0e07a3..058fa6d0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2014-09-25 Kaz Kylheku <kaz@kylheku.com>
+
+ * lib.c (do_and, do_or): Fix broken andf and orf,
+ lacking the semantics of returning the last value,
+ or the first true value, respectively.
+
2014-09-22 Kaz Kylheku <kaz@kylheku.com>
* Makefile (txr-manpage.pdf): New target.
diff --git a/lib.c b/lib.c
index c8298468..dfed7700 100644
--- a/lib.c
+++ b/lib.c
@@ -4335,12 +4335,13 @@ val juxtv(val funlist)
static val do_and(val fun1_list, val args)
{
fun1_list = nullify(fun1_list);
+ val ret = nil;
for (; fun1_list; fun1_list = cdr(fun1_list))
- if (nilp(apply(car(fun1_list), args, nil)))
- return nil;
+ if (nilp((ret = apply(car(fun1_list), args, nil))))
+ break;
- return t;
+ return ret;
}
val andf(val first_fun, ...)
@@ -4380,12 +4381,13 @@ val swap_12_21(val fun)
static val do_or(val fun1_list, val args)
{
fun1_list = nullify(fun1_list);
+ val ret = nil;
for (; fun1_list; fun1_list = cdr(fun1_list))
- if (apply(car(fun1_list), args, nil))
- return t;
+ if ((ret = apply(car(fun1_list), args, nil)))
+ break;
- return nil;
+ return ret;
}
val orf(val first_fun, ...)