From d453e38a773a618ead6772f34c9beff73b0c2d1d Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Fri, 5 Jun 2020 21:39:21 -0700 Subject: seq_iter_rewind: support iterables. This fixes cases like (isec 0..10 5..15). * lib.c (seq_iter_rewind): Handle the rewinding of non-sequence iterators (ranges, characters, numbers). --- lib.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/lib.c b/lib.c index 61e89907..486ceee8 100644 --- a/lib.c +++ b/lib.c @@ -559,6 +559,37 @@ void seq_iter_rewind(seq_iter_t *it) it->ui.iter = hash_begin(it->inf.obj); break; default: + switch (it->inf.type) { + case RNG: + { + val rf = from(it->inf.obj); + + switch (type(rf)) { + case NUM: + it->ui.cn = c_num(rf); + break; + case CHR: + it->ui.cn = c_chr(rf); + break; + case BGNUM: + it->ui.vn = rf; + break; + default: + break; + } + } + break; + case CHR: + it->ui.cn = c_chr(it->inf.obj); + break; + case NUM: + case BGNUM: + case FLNUM: + it->ui.vn = it->inf.obj; + break; + default: + break; + } break; } } -- cgit v1.2.3