# HG changeset patch # User Bram Moolenaar # Date 1665666907 -7200 # Node ID c02b74b876089affc2ee4aa51e40c1cc00bc84ab # Parent d44a91de374e51df728042e6240ba9107146b815 patch 9.0.0740: prop_add_list() gives multiple errors for invalid argument Commit: https://github.com/vim/vim/commit/4997f2a605e15261c4f825494324371f271ef6a8 Author: Bram Moolenaar 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. diff --git a/src/globals.h b/src/globals.h --- 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 diff --git a/src/testdir/test_textprop.vim b/src/testdir/test_textprop.vim --- 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 --- 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, diff --git a/src/version.c b/src/version.c --- 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,