diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2020-05-25 06:26:36 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2020-05-25 06:26:36 -0700 |
commit | 27f5d98142eeb3bb75430521f4d484cbffad3254 (patch) | |
tree | 68264d67b0bbccfd459fcd4efae3779eb02d3728 /lib.c | |
parent | 29ef365cd0c0931b5b34a5258b036e8d5a966357 (diff) | |
download | txr-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.c | 6 |
1 files changed, 2 insertions, 4 deletions
@@ -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; } } |