summaryrefslogtreecommitdiffstats
path: root/ffi.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2019-06-18 06:36:13 -0700
committerKaz Kylheku <kaz@kylheku.com>2019-06-18 06:36:13 -0700
commit8331e7f693366f7775ab107953678dc4909a4068 (patch)
tree5a1231a56c7bfda37fd282c37f22bb4e9fc21e6f /ffi.c
parente545f014c3e3336c929e0981948cc8f62423be7e (diff)
downloadtxr-8331e7f693366f7775ab107953678dc4909a4068.tar.gz
txr-8331e7f693366f7775ab107953678dc4909a4068.tar.bz2
txr-8331e7f693366f7775ab107953678dc4909a4068.zip
carray-replace: use seq_iter.
* ffi.c (carray_replace): Use generic sequence iteration for range replacement instead of separate list/vector code.
Diffstat (limited to 'ffi.c')
-rw-r--r--ffi.c20
1 files changed, 5 insertions, 15 deletions
diff --git a/ffi.c b/ffi.c
index 2459dc17..49f6303e 100644
--- a/ffi.c
+++ b/ffi.c
@@ -4934,6 +4934,8 @@ val carray_replace(val carray, val values, val from, val to)
cnum vn = c_num(vlen);
cnum sn;
mem_t *ptr;
+ seq_iter_t item_iter;
+ seq_iter_init(self, &item_iter, values);
if (fn < 0)
fn = 0;
@@ -4976,21 +4978,9 @@ val carray_replace(val carray, val values, val from, val to)
}
}
- if (consp(values)) {
- val iter;
-
- for (iter = values; fn < sn; iter = cdr(iter), fn++, ptr += elsize)
- {
- val newval = car(iter);
- eltft->put(eltft, newval, ptr, self);
- }
- } else if (values) {
- cnum i;
-
- for (i = 0; fn < sn; i++, fn++, ptr += elsize) {
- val newval = ref(values, num_fast(i));
- eltft->put(eltft, newval, ptr, self);
- }
+ for (; fn != tn; fn++, ptr += elsize) {
+ val item = seq_geti(&item_iter);
+ eltft->put(eltft, item, ptr, self);
}
return carray;