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 | 0c253bf8a63295027405c0ac420b11afb3df1e65 (patch) | |
tree | 68264d67b0bbccfd459fcd4efae3779eb02d3728 | |
parent | cbb66a07785750dd1884143eefbacd78ae048d0b (diff) | |
download | txr-0c253bf8a63295027405c0ac420b11afb3df1e65.tar.gz txr-0c253bf8a63295027405c0ac420b11afb3df1e65.tar.bz2 txr-0c253bf8a63295027405c0ac420b11afb3df1e65.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.
-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; } } |