From 39317da1ce84bb30b103fc580219cb4e509da281 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Thu, 15 Jun 2017 22:30:39 -0700 Subject: reverse, nreverse: do generalized sequences and carray. * lib.c (reverse): Support COBJ via list operations, but handle carray via vector case. (nreverse): Support COBJ via vector case. This will work for carray. Fixes are needed in ref and refset to work with structs. --- lib.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/lib.c b/lib.c index ee7e8eeb..800142a2 100644 --- a/lib.c +++ b/lib.c @@ -1013,6 +1013,7 @@ val nreverse(val in) return rev; } + case COBJ: case VEC: case STR: { @@ -1033,11 +1034,17 @@ val nreverse(val in) } } -val reverse(val in) +val reverse(val seq_in) { + val in = nullify(seq_in); + switch (type(in)) { case NIL: return nil; + case COBJ: + if (in->co.cls == carray_s) + goto carray; + /* fallthrough */ case CONS: case LCONS: { @@ -1048,7 +1055,7 @@ val reverse(val in) in = cdr(in); } - return rev; + return make_like(rev, seq_in); } case LSTR: in = lazy_str_force(in); @@ -1056,6 +1063,7 @@ val reverse(val in) case VEC: case STR: case LIT: + carray: { val obj = copy(in); cnum len = c_num(length(in)); -- cgit v1.2.3