From b3c1e6eb4e2b536574253cb744baf3fff5d4b6fc Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Mon, 17 Jun 2024 22:27:08 -0700 Subject: iter_reset: call seq_info only when needed. * lib.c (iter_reset): Propagate sinf variable and seq_info call which initializes it into the scopes where it is used. --- lib.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/lib.c b/lib.c index 6e097e80..8bec2c90 100644 --- a/lib.c +++ b/lib.c @@ -1441,7 +1441,6 @@ val iter_step(val iter) val iter_reset(val iter, val obj) { val self = lit("iter-reset"); - seq_info_t sinf = seq_info(obj); switch (type(iter)) { case CHR: @@ -1452,6 +1451,7 @@ val iter_reset(val iter, val obj) if (iter->co.cls == seq_iter_cls) { struct seq_iter *si = coerce(struct seq_iter *, iter->co.handle); + seq_info_t sinf = seq_info(obj); seq_iter_init_with_info(self, si, sinf, 0); if (si->ops->mark) mut(iter); @@ -1464,12 +1464,16 @@ val iter_reset(val iter, val obj) if (iter_reset_meth) return funcall2(iter_reset_meth, obj, iter); } - switch (sinf.kind) { - case SEQ_NIL: - case SEQ_LISTLIKE: - return sinf.obj; - default: - return iter_begin(obj); + + { + seq_info_t sinf = seq_info(obj); + switch (sinf.kind) { + case SEQ_NIL: + case SEQ_LISTLIKE: + return sinf.obj; + default: + return iter_begin(obj); + } } } } -- cgit v1.2.3