]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.0.0740: prop_add_list() gives multiple errors for invalid argument v9.0.0740
authorBram Moolenaar <Bram@vim.org>
Thu, 13 Oct 2022 13:00:45 +0000 (14:00 +0100)
committerBram Moolenaar <Bram@vim.org>
Thu, 13 Oct 2022 13:00:45 +0000 (14:00 +0100)
Problem:    prop_add_list() gives multiple errors for invalid argument.
Solution:   Only give one error message.

src/globals.h
src/testdir/test_textprop.vim
src/textprop.c
src/version.c

index 0228825d5b8382ef16239c01f32725c0e5894bca..9d70da6ca8d74e2e0d5a3be04b5fc34b8e3293c1 100644 (file)
@@ -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
index 9cdd0da68877a2a82244031361991d11c6df0ef6..34c719d9642c626be33547367359181792746c08 100644 (file)
@@ -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
index 4153e3f45335e85559ba444b1a28fb9fc078f846..9256368125a354d8d7d56db1a1ffa4dc6260e3be 100644 (file)
@@ -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,
index 4014da658a5b8af96fa9152658a3e1a6542198b5..3076cb0db8b84daaafc1f281fe83b45d8373b432 100644 (file)
@@ -699,6 +699,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    740,
 /**/
     739,
 /**/