changeset 30811:c02b74b87608 v9.0.0740

patch 9.0.0740: prop_add_list() gives multiple errors for invalid argument Commit: https://github.com/vim/vim/commit/4997f2a605e15261c4f825494324371f271ef6a8 Author: Bram Moolenaar <Bram@vim.org> Date: Thu Oct 13 14:00:45 2022 +0100 patch 9.0.0740: prop_add_list() gives multiple errors for invalid argument Problem: prop_add_list() gives multiple errors for invalid argument. Solution: Only give one error message.
author Bram Moolenaar <Bram@vim.org>
date Thu, 13 Oct 2022 15:15:07 +0200
parents d44a91de374e
children 19afe50858f8
files src/globals.h src/testdir/test_textprop.vim src/textprop.c src/version.c
diffstat 4 files changed, 17 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/globals.h
+++ b/src/globals.h
@@ -219,8 +219,8 @@ EXTERN char_u	*emsg_assert_fails_context
 
 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
--- 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
--- a/src/textprop.c
+++ b/src/textprop.c
@@ -353,6 +353,7 @@ f_prop_add_list(typval_T *argvars, typva
     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, typva
 
 	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,
--- 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,