diff options
author | Bram Moolenaar <Bram@vim.org> | 2021-02-04 22:07:16 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2021-02-04 22:07:16 +0100 |
commit | ab65fc77c5389f7d3f788bbdc3d931561feab131 (patch) | |
tree | 7ab784099432a7f4719ee667ffbf00a199a87979 /src | |
parent | 92bb83e41ca42d0d00d21753810d92485c808a50 (diff) | |
download | vim-git-ab65fc77c5389f7d3f788bbdc3d931561feab131.tar.gz |
patch 8.2.2466: max() and min() can give many error messagesv8.2.2466
Problem: Max() and min() can give many error messages.
Solution: Bail out at the first error. (closes #1039, closes #7778)
Diffstat (limited to 'src')
-rw-r--r-- | src/evalfunc.c | 9 | ||||
-rw-r--r-- | src/testdir/test_functions.vim | 8 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 18 insertions, 1 deletions
diff --git a/src/evalfunc.c b/src/evalfunc.c index 0b4b5021a..f15139f36 100644 --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -6769,12 +6769,16 @@ max_min(typval_T *argvars, typval_T *rettv, int domax) if (li != NULL) { n = tv_get_number_chk(&li->li_tv, &error); + if (error) + return; // type error; errmsg already given for (;;) { li = li->li_next; if (li == NULL) break; i = tv_get_number_chk(&li->li_tv, &error); + if (error) + return; // type error; errmsg already given if (domax ? i > n : i < n) n = i; } @@ -6799,6 +6803,8 @@ max_min(typval_T *argvars, typval_T *rettv, int domax) { --todo; i = tv_get_number_chk(&HI2DI(hi)->di_tv, &error); + if (error) + return; // type error; errmsg already given if (first) { n = i; @@ -6812,7 +6818,8 @@ max_min(typval_T *argvars, typval_T *rettv, int domax) } else semsg(_(e_listdictarg), domax ? "max()" : "min()"); - rettv->vval.v_number = error ? 0 : n; + + rettv->vval.v_number = n; } /* diff --git a/src/testdir/test_functions.vim b/src/testdir/test_functions.vim index b82f72fd0..64afe5481 100644 --- a/src/testdir/test_functions.vim +++ b/src/testdir/test_functions.vim @@ -124,6 +124,10 @@ func Test_max() call assert_fails('call max(1)', 'E712:') call assert_fails('call max(v:none)', 'E712:') + + " check we only get one error + call assert_fails('call max([#{}, [1]])', ['E728:', 'E728:']) + call assert_fails('call max(#{a: {}, b: [1]})', ['E728:', 'E728:']) endfunc func Test_min() @@ -137,6 +141,10 @@ func Test_min() call assert_fails('call min(1)', 'E712:') call assert_fails('call min(v:none)', 'E712:') + + " check we only get one error + call assert_fails('call min([[1], #{}])', ['E745:', 'E745:']) + call assert_fails('call min(#{a: [1], b: #{}})', ['E745:', 'E745:']) endfunc func Test_strwidth() diff --git a/src/version.c b/src/version.c index 7f672301e..0ea7fb449 100644 --- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2466, +/**/ 2465, /**/ 2464, |