summaryrefslogtreecommitdiffstats
path: root/lib.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2024-02-27 06:47:47 -0800
committerKaz Kylheku <kaz@kylheku.com>2024-02-27 06:47:47 -0800
commitabfc025c6e6c6db4acaeef74801dc4baaa2376bd (patch)
treee63c4a3835951db7654e651c4a8c59ad034d3cca /lib.c
parent06dfa00f02b6c816849dcee4e0dbc1133a3f6eb2 (diff)
downloadtxr-abfc025c6e6c6db4acaeef74801dc4baaa2376bd.tar.gz
txr-abfc025c6e6c6db4acaeef74801dc4baaa2376bd.tar.bz2
txr-abfc025c6e6c6db4acaeef74801dc4baaa2376bd.zip
seq_build: allow initialization from iterator.
* lib.c (seq_build_init): Replicate a feature of make_like: if the reference object is an iterator, then we recurse: we initialize according to the object it is iterating.
Diffstat (limited to 'lib.c')
-rw-r--r--lib.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/lib.c b/lib.c
index 2f5a46ba..314fde4f 100644
--- a/lib.c
+++ b/lib.c
@@ -1545,6 +1545,12 @@ void seq_build_init(seq_build_t *bu, val likeobj)
bu->ops = &sb_buf_ops;
break;
case COBJ:
+ if (likeobj->co.cls == seq_iter_cls)
+ {
+ struct seq_iter *si = coerce(struct seq_iter *, likeobj->co.handle);
+ seq_build_init(bu, si->inf.obj);
+ break;
+ }
if (obj_struct_p(likeobj)) {
val from_list_meth = get_special_slot(likeobj, from_list_m);