diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2017-11-15 20:17:59 -0800 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2017-11-15 20:17:59 -0800 |
commit | 9703a3ea2637f563b7bde6a40a1157a387bb3ef6 (patch) | |
tree | 8d2f3d3b682104b51c82c9a66346afdf833d3770 | |
parent | a3ded2b8f41daad55d3aca8b40722a3072590242 (diff) | |
download | txr-9703a3ea2637f563b7bde6a40a1157a387bb3ef6.tar.gz txr-9703a3ea2637f563b7bde6a40a1157a387bb3ef6.tar.bz2 txr-9703a3ea2637f563b7bde6a40a1157a387bb3ef6.zip |
find-max: bugfix for zero length vectors.
* lib.c (find_max): Fix a regression introduced
in recent work: only execute the loop when the vector isn't
empty.
-rw-r--r-- | lib.c | 25 |
1 files changed, 15 insertions, 10 deletions
@@ -8567,21 +8567,26 @@ val find_max(val seq, val testfun, val keyfun) case SEQ_VECLIKE: { val vec = si.obj; - val maxelt = ref(vec, zero); - val maxkey = funcall1(keyfun, maxelt); val len = length(vec); - val i; - for (i = one; lt(i, len); i = succ(i)) { - val elt = ref(vec, i); - val key = funcall1(keyfun, elt); - if (funcall2(testfun, key, maxkey)) { - maxkey = key; - maxelt = elt; + if (len != zero) { + val maxelt = ref(vec, zero); + val maxkey = funcall1(keyfun, maxelt); + val i; + + for (i = one; lt(i, len); i = succ(i)) { + val elt = ref(vec, i); + val key = funcall1(keyfun, elt); + if (funcall2(testfun, key, maxkey)) { + maxkey = key; + maxelt = elt; + } } + + return maxelt; } - return maxelt; + return nil; } case SEQ_NOTSEQ: default: |