diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2024-06-17 22:27:08 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2024-06-17 22:27:08 -0700 |
commit | b1cfa78f71ff5a6a9793f8c12e67f00fd1654d01 (patch) | |
tree | c7a581d4adc0af609cef31b5cb8c5efa647ae4d2 | |
parent | 87778566471d89f64f435de0fd07fe1d8e2dc4ef (diff) | |
download | txr-b1cfa78f71ff5a6a9793f8c12e67f00fd1654d01.tar.gz txr-b1cfa78f71ff5a6a9793f8c12e67f00fd1654d01.tar.bz2 txr-b1cfa78f71ff5a6a9793f8c12e67f00fd1654d01.zip |
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.
-rw-r--r-- | lib.c | 18 |
1 files changed, 11 insertions, 7 deletions
@@ -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); + } } } } |