summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2022-10-13 14:00:45 +0100
committerBram Moolenaar <Bram@vim.org>2022-10-13 14:00:45 +0100
commit4997f2a605e15261c4f825494324371f271ef6a8 (patch)
treecb74cc4914c7bf84073a5d48c5de2c87b1733ad3
parent17822c507c03d509037c9ee5eee5cfbb201b3f01 (diff)
patch 9.0.0740: prop_add_list() gives multiple errors for invalid argumentv9.0.0740
Problem: prop_add_list() gives multiple errors for invalid argument. Solution: Only give one error message.
-rw-r--r--src/globals.h4
-rw-r--r--src/testdir/test_textprop.vim3
-rw-r--r--src/textprop.c15
-rw-r--r--src/version.c2
4 files changed, 17 insertions, 7 deletions
diff --git a/src/globals.h b/src/globals.h
index 0228825d5b..9d70da6ca8 100644
--- a/src/globals.h
+++ b/src/globals.h
@@ -219,8 +219,8 @@ EXTERN char_u *emsg_assert_fails_context INIT(= NULL);
EXTERN int did_endif INIT(= FALSE); // just had ":endif"
#endif
-EXTERN int did_emsg; // set by emsg() when the message
- // is displayed or thrown
+EXTERN int did_emsg; // incremented by emsg() when a
+ // message is displayed or thrown
#ifdef FEAT_EVAL
EXTERN int did_emsg_silent INIT(= 0); // incremented by emsg() when
// emsg_silent was set and did_emsg
diff --git a/src/testdir/test_textprop.vim b/src/testdir/test_textprop.vim
index 9cdd0da688..34c719d964 100644
--- a/src/testdir/test_textprop.vim
+++ b/src/testdir/test_textprop.vim
@@ -383,6 +383,9 @@ func Test_prop_add_list()
call assert_fails('call prop_add_list(test_null_dict(), [[2, 2, 2]])', 'E965:')
call assert_fails('call prop_add_list(#{type: "one"}, test_null_list())', 'E1298:')
call assert_fails('call prop_add_list(#{type: "one"}, [test_null_list()])', 'E714:')
+
+ " only one error for multiple wrong values
+ call assert_fails('call prop_add_list(#{type: "one"}, [[{}, [], 0z00, 0.3]])', ['E728:', 'E728:'])
call DeletePropTypes()
bw!
endfunc
diff --git a/src/textprop.c b/src/textprop.c
index 4153e3f453..9256368125 100644
--- a/src/textprop.c
+++ b/src/textprop.c
@@ -353,6 +353,7 @@ f_prop_add_list(typval_T *argvars, typval_T *rettv UNUSED)
linenr_T end_lnum;
colnr_T end_col;
int error = FALSE;
+ int prev_did_emsg = did_emsg;
if (check_for_dict_arg(argvars, 0) == FAIL
|| check_for_list_arg(argvars, 1) == FAIL)
@@ -389,13 +390,17 @@ f_prop_add_list(typval_T *argvars, typval_T *rettv UNUSED)
pos_list = li->li_tv.vval.v_list;
start_lnum = list_find_nr(pos_list, 0L, &error);
- start_col = list_find_nr(pos_list, 1L, &error);
- end_lnum = list_find_nr(pos_list, 2L, &error);
- end_col = list_find_nr(pos_list, 3L, &error);
+ if (!error)
+ start_col = list_find_nr(pos_list, 1L, &error);
+ if (!error)
+ end_lnum = list_find_nr(pos_list, 2L, &error);
+ if (!error)
+ end_col = list_find_nr(pos_list, 3L, &error);
if (error || start_lnum <= 0 || start_col <= 0
- || end_lnum <= 0 || end_col <= 0)
+ || end_lnum <= 0 || end_col <= 0)
{
- emsg(_(e_invalid_argument));
+ if (prev_did_emsg == did_emsg)
+ emsg(_(e_invalid_argument));
return;
}
if (prop_add_one(buf, type_name, id, NULL, 0, 0, start_lnum, end_lnum,
diff --git a/src/version.c b/src/version.c
index 4014da658a..3076cb0db8 100644
--- a/src/version.c
+++ b/src/version.c
@@ -700,6 +700,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 740,
+/**/
739,
/**/
738,