summaryrefslogtreecommitdiffstats
path: root/lib.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib.c')
-rw-r--r--lib.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/lib.c b/lib.c
index 193f8196..077d51ea 100644
--- a/lib.c
+++ b/lib.c
@@ -1597,6 +1597,16 @@ static void seq_build_str_add(seq_build_t *bu, val item)
}
}
+static void seq_build_strcat_add(seq_build_t *bu, val item)
+{
+ if (chrp(item) || stringp(item)) {
+ string_extend(bu->obj, item, nil);
+ } else {
+ seq_build_convert_to_list(bu, list_str(bu->obj));
+ bu->ops->add(bu, item);
+ }
+}
+
static void seq_build_str_finish(seq_build_t *bu)
{
string_finish(bu->obj);
@@ -1669,6 +1679,13 @@ static struct seq_build_ops
seq_build_obj_mark);
static struct seq_build_ops
+ sb_strcat_ops = seq_build_ops_init(seq_build_strcat_add,
+ seq_build_generic_pend,
+ seq_build_generic_pend,
+ seq_build_str_finish,
+ seq_build_obj_mark);
+
+static struct seq_build_ops
sb_buf_ops = seq_build_ops_init(seq_build_buf_add,
seq_build_generic_pend,
seq_build_generic_pend,
@@ -1772,6 +1789,12 @@ void seq_build_init(val self, seq_build_t *bu, val likeobj)
}
}
+void seq_build_strcat_init(seq_build_t *bu)
+{
+ bu->obj = string(L"");
+ bu->ops = &sb_strcat_ops;
+}
+
void seq_add(seq_build_t *bu, val item)
{
bu->ops->add(bu, item);