summaryrefslogtreecommitdiffstats
path: root/lib.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2012-03-16 22:22:19 -0700
committerKaz Kylheku <kaz@kylheku.com>2012-03-16 22:22:19 -0700
commit18466ee1380682028364ac690a8745caf156d353 (patch)
treea0b67f57b2f9318ce59807c3d292524d80f6d7a7 /lib.c
parent8bb336298d0bf4e165fa03f7f2a219ddad6e466f (diff)
downloadtxr-18466ee1380682028364ac690a8745caf156d353.tar.gz
txr-18466ee1380682028364ac690a8745caf156d353.tar.bz2
txr-18466ee1380682028364ac690a8745caf156d353.zip
* lib.c (do_chain): More useful behavior. The first
function, if any, is treated as variadic. Subsequent functions are monadic. (chain, chainv): Turn do_chain into variadic.
Diffstat (limited to 'lib.c')
-rw-r--r--lib.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/lib.c b/lib.c
index 9d3c1ccb..7462f685 100644
--- a/lib.c
+++ b/lib.c
@@ -2815,8 +2815,15 @@ val curry_1234_34(val fun4, val arg1, val arg2)
return func_f2(cons(fun4, cons(arg1, arg2)), do_curry_1234_34);
}
-static val do_chain(val fun1_list, val arg)
+static val do_chain(val fun1_list, val args)
{
+ val arg = nil;
+
+ if (fun1_list) {
+ arg = apply(car(fun1_list), args, nil);
+ fun1_list = cdr(fun1_list);
+ }
+
for (; fun1_list; fun1_list = cdr(fun1_list))
arg = funcall1(car(fun1_list), arg);
@@ -2839,12 +2846,12 @@ val chain(val first_fun, ...)
va_end (vl);
}
- return func_f1(out, do_chain);
+ return func_f0v(out, do_chain);
}
val chainv(val funlist)
{
- return func_f1(funlist, do_chain);
+ return func_f0v(funlist, do_chain);
}
static val do_and(val fun1_list, val args)