summaryrefslogtreecommitdiffstats
path: root/stream.c
diff options
context:
space:
mode:
Diffstat (limited to 'stream.c')
-rw-r--r--stream.c40
1 files changed, 14 insertions, 26 deletions
diff --git a/stream.c b/stream.c
index ed423dd8..1efc58b6 100644
--- a/stream.c
+++ b/stream.c
@@ -50,11 +50,11 @@
#if HAVE_WINDOWS_H
#include <windows.h>
#endif
+#include ALLOCA_H
#include "lib.h"
#include "gc.h"
#include "signal.h"
#include "unwind.h"
-#include ALLOCA_H
#include "args.h"
#include "stream.h"
#include "utf8.h"
@@ -1863,6 +1863,11 @@ val make_catenated_stream(val stream_list)
return cobj(coerce(mem_t *, s), stream_s, &cat_stream_ops.cobj_ops);
}
+val make_catenated_stream_v(struct args *streams)
+{
+ return make_catenated_stream(args_get_list(streams));
+}
+
val catenated_stream_p(val obj)
{
return if2(streamp(obj), c_true(obj->co.ops == &cat_stream_ops.cobj_ops));
@@ -2135,8 +2140,12 @@ static void vformat_str(val stream, val str, int width, enum align align,
rel1(&str);
}
-static val aformat(val stream, val fmtstr, struct args *al)
+val formatv(val stream_in, val fmtstr, struct args *al)
{
+ uses_or2;
+ val stream = if3(stream_in == t,
+ std_output,
+ or2(stream_in, make_string_output_stream()));
val save_indent = get_indent(stream);
val save_mode = nil;
val name = lit("format");
@@ -2503,7 +2512,7 @@ static val aformat(val stream, val fmtstr, struct args *al)
uw_catch_end;
- return t;
+ return (stream_in) ? t : get_string_from_stream(stream);
}
val vformat(val stream, val fmtstr, va_list vl)
@@ -2515,7 +2524,7 @@ val vformat(val stream, val fmtstr, va_list vl)
while ((arg = va_arg(vl, val)) != nao)
args_add_checked(lit("format"), args, arg);
- return aformat(stream, fmtstr, args);
+ return formatv(stream, fmtstr, args);
}
val vformat_to_string(val fmtstr, va_list vl)
@@ -2543,27 +2552,6 @@ val format(val stream, val str, ...)
}
}
-val formatv(val stream, val string, val arglist)
-{
- uses_or2;
- val st = if3(stream == t,
- std_output,
- or2(stream, make_string_output_stream()));
- cnum argc = args_limit(lit("format"), c_num(length_list(arglist)));
- struct args *args = args_alloc(argc);
- val ret;
-
- class_check(st, stream_s);
- args_init(args, argc);
-
- for (; arglist; arglist = cdr(arglist))
- args_add(args, car(arglist));
-
- ret = aformat(st, string, args);
-
- return (stream) ? ret : get_string_from_stream(st);
-}
-
static val put_indent(val stream, struct strm_ops *ops, cnum chars)
{
while (chars--)
@@ -3293,7 +3281,7 @@ void stream_init(void)
reg_fun(intern(lit("stream-set-prop"), user_package), func_n3(stream_set_prop));
reg_fun(intern(lit("stream-get-prop"), user_package), func_n2(stream_get_prop));
reg_fun(intern(lit("fileno"), user_package), curry_12_1(func_n2(stream_get_prop), fd_k));
- reg_fun(intern(lit("make-catenated-stream"), user_package), func_n0v(make_catenated_stream));
+ reg_fun(intern(lit("make-catenated-stream"), user_package), func_n0v(make_catenated_stream_v));
reg_fun(intern(lit("cat-streams"), user_package), func_n1(make_catenated_stream));
reg_fun(intern(lit("catenated-stream-p"), user_package), func_n1(catenated_stream_p));
reg_fun(intern(lit("catenated-stream-push"), user_package), func_n2(catenated_stream_push));