From 91cbe62a2d77cc7a7e801c56771fe7ef879e1d85 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Tue, 25 Jun 2019 07:16:03 -0700 Subject: list_collect: handle objects. * lib.c (list_collect): Handle sequence-like COBJ objects. We can add an item to using their respective replace functions. (replace_obj): Change to external linkage. * lib.h (replace_obj): Declared. --- lib.c | 11 ++++++++++- lib.h | 1 + 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/lib.c b/lib.c index 57cdae51..e133c854 100644 --- a/lib.c +++ b/lib.c @@ -1047,6 +1047,15 @@ loc list_collect(loc ptail, val obj) case LSTR: replace_str(tailobj, items, t, t); return ptail; + case COBJ: + if (tailobj->co.cls == carray_s) { + carray_replace(tailobj, items, t, t); + return ptail; + } + if (obj_struct_p(tailobj)) { + replace_obj(tailobj, items, t, t); + return ptail; + } default: uw_throwf(error_s, lit("cannot append ~s"), deref(ptail), nao); } @@ -7277,7 +7286,7 @@ val replace_vec(val vec_in, val items, val from, val to) return vec_in; } -static val replace_obj(val obj, val items, val from, val to) +val replace_obj(val obj, val items, val from, val to) { val self = lit("replace"); val lambda_set_meth = maybe_slot(obj, lambda_set_s); diff --git a/lib.h b/lib.h index 9bcf2b22..4558085a 100644 --- a/lib.h +++ b/lib.h @@ -1005,6 +1005,7 @@ val list_vec(val vector); val copy_vec(val vec); val sub_vec(val vec_in, val from, val to); val replace_vec(val vec_in, val items, val from, val to); +val replace_obj(val obj, val items, val from, val to); val cat_vec(val list); val lazy_stream_cons(val stream); val lazy_str(val list, val term, val limit); -- cgit v1.2.3