0
0
mirror of https://github.com/vim/vim.git synced 2025-09-25 03:54:15 -04:00

patch 8.2.2466: max() and min() can give many error messages

Problem:    Max() and min() can give many error messages.
Solution:   Bail out at the first error. (closes #1039, closes #7778)
This commit is contained in:
Bram Moolenaar
2021-02-04 22:07:16 +01:00
parent 92bb83e41c
commit ab65fc77c5
3 changed files with 18 additions and 1 deletions

View File

@@ -6769,12 +6769,16 @@ max_min(typval_T *argvars, typval_T *rettv, int domax)
if (li != NULL) if (li != NULL)
{ {
n = tv_get_number_chk(&li->li_tv, &error); n = tv_get_number_chk(&li->li_tv, &error);
if (error)
return; // type error; errmsg already given
for (;;) for (;;)
{ {
li = li->li_next; li = li->li_next;
if (li == NULL) if (li == NULL)
break; break;
i = tv_get_number_chk(&li->li_tv, &error); i = tv_get_number_chk(&li->li_tv, &error);
if (error)
return; // type error; errmsg already given
if (domax ? i > n : i < n) if (domax ? i > n : i < n)
n = i; n = i;
} }
@@ -6799,6 +6803,8 @@ max_min(typval_T *argvars, typval_T *rettv, int domax)
{ {
--todo; --todo;
i = tv_get_number_chk(&HI2DI(hi)->di_tv, &error); i = tv_get_number_chk(&HI2DI(hi)->di_tv, &error);
if (error)
return; // type error; errmsg already given
if (first) if (first)
{ {
n = i; n = i;
@@ -6812,7 +6818,8 @@ max_min(typval_T *argvars, typval_T *rettv, int domax)
} }
else else
semsg(_(e_listdictarg), domax ? "max()" : "min()"); semsg(_(e_listdictarg), domax ? "max()" : "min()");
rettv->vval.v_number = error ? 0 : n;
rettv->vval.v_number = n;
} }
/* /*

View File

@@ -124,6 +124,10 @@ func Test_max()
call assert_fails('call max(1)', 'E712:') call assert_fails('call max(1)', 'E712:')
call assert_fails('call max(v:none)', '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 endfunc
func Test_min() func Test_min()
@@ -137,6 +141,10 @@ func Test_min()
call assert_fails('call min(1)', 'E712:') call assert_fails('call min(1)', 'E712:')
call assert_fails('call min(v:none)', '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 endfunc
func Test_strwidth() func Test_strwidth()

View File

@@ -750,6 +750,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
2466,
/**/ /**/
2465, 2465,
/**/ /**/