summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2024-06-17 22:27:08 -0700
committerKaz Kylheku <kaz@kylheku.com>2024-06-17 22:27:08 -0700
commitb1cfa78f71ff5a6a9793f8c12e67f00fd1654d01 (patch)
treec7a581d4adc0af609cef31b5cb8c5efa647ae4d2
parent87778566471d89f64f435de0fd07fe1d8e2dc4ef (diff)
downloadtxr-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.c18
1 files 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);
+ }
}
}
}