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 | b3c1e6eb4e2b536574253cb744baf3fff5d4b6fc (patch) | |
tree | c7a581d4adc0af609cef31b5cb8c5efa647ae4d2 | |
parent | 881c87fa8856e0d66d1d13dda36c461dc95da0b7 (diff) | |
download | txr-b3c1e6eb4e2b536574253cb744baf3fff5d4b6fc.tar.gz txr-b3c1e6eb4e2b536574253cb744baf3fff5d4b6fc.tar.bz2 txr-b3c1e6eb4e2b536574253cb744baf3fff5d4b6fc.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); + } } } } |