summaryrefslogtreecommitdiffstats
path: root/eval.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2015-03-28 19:14:53 -0700
committerKaz Kylheku <kaz@kylheku.com>2015-03-28 19:14:53 -0700
commit084bde656bac142bba5311b519c7bb78e2c45dad (patch)
tree4966a7893b0d06768ca530ebf6ed97fe4d3c8a28 /eval.c
parent051bf360110a5b9649fe9a2b5b35b2dcfed868d6 (diff)
downloadtxr-084bde656bac142bba5311b519c7bb78e2c45dad.tar.gz
txr-084bde656bac142bba5311b519c7bb78e2c45dad.tar.bz2
txr-084bde656bac142bba5311b519c7bb78e2c45dad.zip
* eval.c (prinl, pprinl): Become external functions.
(tprint): New function. (eval_init): Register tprint as intrinsic. * eval.h (prinl, pprinl, tprint): Declared. * txr.c (txr_main): New option, -t. * txr.1: Documented tprint and -t option.
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c28
1 files changed, 26 insertions, 2 deletions
diff --git a/eval.c b/eval.c
index c4196e72..cb7229b0 100644
--- a/eval.c
+++ b/eval.c
@@ -3664,20 +3664,43 @@ static val mapf(val fun, val funlist)
return func_f0v(cons(fun, funlist), do_mapf);
}
-static val prinl(val obj, val stream)
+val prinl(val obj, val stream)
{
val ret = obj_print(obj, stream);
put_char(chr('\n'), stream);
return ret;
}
-static val pprinl(val obj, val stream)
+val pprinl(val obj, val stream)
{
val ret = obj_pprint(obj, stream);
put_char(chr('\n'), stream);
return ret;
}
+val tprint(val obj, val out)
+{
+ switch (type(obj)) {
+ case NIL:
+ break;
+ case CONS:
+ case LCONS:
+ case VEC:
+ mapdo(curry_12_1(func_n2(tprint), out), obj);
+ break;
+ case LIT:
+ case STR:
+ case LSTR:
+ put_line(obj, out);
+ break;
+ default:
+ pprinl(obj, out);
+ break;
+ }
+
+ return nil;
+}
+
static val merge_wrap(val seq1, val seq2, val lessfun, val keyfun)
{
if (!nullify(seq1)) {
@@ -4139,6 +4162,7 @@ void eval_init(void)
reg_fun(intern(lit("tostringp"), user_package), func_n1(tostringp));
reg_fun(intern(lit("prinl"), user_package), func_n2o(prinl, 1));
reg_fun(intern(lit("pprinl"), user_package), func_n2o(pprinl, 1));
+ reg_fun(intern(lit("tprint"), user_package), func_n2o(tprint, 1));
reg_var(user_package_s = intern(lit("*user-package*"), user_package_var),
user_package_var);