summaryrefslogtreecommitdiffstats
path: root/lib.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2020-05-25 06:26:36 -0700
committerKaz Kylheku <kaz@kylheku.com>2020-05-25 06:26:36 -0700
commit27f5d98142eeb3bb75430521f4d484cbffad3254 (patch)
tree68264d67b0bbccfd459fcd4efae3779eb02d3728 /lib.c
parent29ef365cd0c0931b5b34a5258b036e8d5a966357 (diff)
downloadtxr-27f5d98142eeb3bb75430521f4d484cbffad3254.tar.gz
txr-27f5d98142eeb3bb75430521f4d484cbffad3254.tar.bz2
txr-27f5d98142eeb3bb75430521f4d484cbffad3254.zip
rsearch: fix broken.
The rsearch function is completely broken, returning incorrect values. * lib.c (search_list, rsearch_list): Update the position in the increment part of the loop. This fix only affects research, but the code is copy-and-paste, so it's good to keep them the same, and the position of the pos update is a code smell regardless.
Diffstat (limited to 'lib.c')
-rw-r--r--lib.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/lib.c b/lib.c
index 7f0d04da..36ea76ba 100644
--- a/lib.c
+++ b/lib.c
@@ -10798,7 +10798,7 @@ static val search_list(val seq, val key, val testfun, val keyfun)
/* TODO: optimize me */
gc_hint(seq);
- for (; seq; seq = cdr(seq)) {
+ for (; seq; seq = cdr(seq), pos = plus(pos, one)) {
for (siter = seq, kiter = key;
siter && kiter;
siter = cdr(siter), kiter = cdr(kiter))
@@ -10807,7 +10807,6 @@ static val search_list(val seq, val key, val testfun, val keyfun)
funcall1(keyfun, car(siter)),
funcall1(keyfun, car(kiter))))
{
- pos = plus(pos, one);
break;
}
}
@@ -10872,7 +10871,7 @@ static val rsearch_list(val seq, val key, val testfun, val keyfun)
/* TODO: optimize me */
gc_hint(seq);
- for (; seq; seq = cdr(seq)) {
+ for (; seq; seq = cdr(seq), pos = plus(pos, one)) {
for (siter = seq, kiter = key;
siter && kiter;
siter = cdr(siter), kiter = cdr(kiter))
@@ -10881,7 +10880,6 @@ static val rsearch_list(val seq, val key, val testfun, val keyfun)
funcall1(keyfun, car(siter)),
funcall1(keyfun, car(kiter))))
{
- pos = plus(pos, one);
break;
}
}