comparison src/sign.c @ 29994:86eb4aba16c3 v9.0.0335

patch 9.0.0335: checks for Dictionary argument often give a vague error Commit: https://github.com/vim/vim/commit/04c4c5746e15884768d2cb41370c3276a196cd4c Author: Yegappan Lakshmanan <yegappan@yahoo.com> Date: Tue Aug 30 19:48:24 2022 +0100 patch 9.0.0335: checks for Dictionary argument often give a vague error Problem: Checks for Dictionary argument often give a vague error message. Solution: Give a useful error message. (Yegappan Lakshmanan, closes https://github.com/vim/vim/issues/11009)
author Bram Moolenaar <Bram@vim.org>
date Tue, 30 Aug 2022 21:00:05 +0200
parents 89e1d67814a9
children adb0de8be4ce
comparison
equal deleted inserted replaced
29993:8dd1900432a0 29994:86eb4aba16c3
2347 2347
2348 name = tv_get_string_chk(&argvars[0]); 2348 name = tv_get_string_chk(&argvars[0]);
2349 if (name == NULL) 2349 if (name == NULL)
2350 return; 2350 return;
2351 2351
2352 if (argvars[1].v_type != VAR_UNKNOWN && argvars[1].v_type != VAR_DICT) 2352 if (check_for_opt_dict_arg(argvars, 1) == FAIL)
2353 { 2353 return;
2354 emsg(_(e_dictionary_required));
2355 return;
2356 }
2357 2354
2358 rettv->vval.v_number = sign_define_from_dict(name, 2355 rettv->vval.v_number = sign_define_from_dict(name,
2359 argvars[1].v_type == VAR_DICT ? argvars[1].vval.v_dict : NULL); 2356 argvars[1].v_type == VAR_DICT ? argvars[1].vval.v_dict : NULL);
2360 } 2357 }
2361 2358
2409 if (buf == NULL) 2406 if (buf == NULL)
2410 return; 2407 return;
2411 2408
2412 if (argvars[1].v_type != VAR_UNKNOWN) 2409 if (argvars[1].v_type != VAR_UNKNOWN)
2413 { 2410 {
2414 if (argvars[1].v_type != VAR_DICT || 2411 if (check_for_nonnull_dict_arg(argvars, 1) == FAIL)
2415 ((dict = argvars[1].vval.v_dict) == NULL))
2416 {
2417 emsg(_(e_dictionary_required));
2418 return; 2412 return;
2419 } 2413 dict = argvars[1].vval.v_dict;
2420 if ((di = dict_find(dict, (char_u *)"lnum", -1)) != NULL) 2414 if ((di = dict_find(dict, (char_u *)"lnum", -1)) != NULL)
2421 { 2415 {
2422 // get signs placed at this line 2416 // get signs placed at this line
2423 (void)tv_get_number_chk(&di->di_tv, &notanum); 2417 (void)tv_get_number_chk(&di->di_tv, &notanum);
2424 if (notanum) 2418 if (notanum)
2638 || check_for_string_arg(argvars, 2) == FAIL 2632 || check_for_string_arg(argvars, 2) == FAIL
2639 || check_for_buffer_arg(argvars, 3) == FAIL 2633 || check_for_buffer_arg(argvars, 3) == FAIL
2640 || check_for_opt_dict_arg(argvars, 4) == FAIL)) 2634 || check_for_opt_dict_arg(argvars, 4) == FAIL))
2641 return; 2635 return;
2642 2636
2643 if (argvars[4].v_type != VAR_UNKNOWN 2637 if (argvars[4].v_type != VAR_UNKNOWN)
2644 && (argvars[4].v_type != VAR_DICT 2638 {
2645 || ((dict = argvars[4].vval.v_dict) == NULL))) 2639 if (check_for_nonnull_dict_arg(argvars, 4) == FAIL)
2646 { 2640 return;
2647 emsg(_(e_dictionary_required)); 2641 dict = argvars[4].vval.v_dict;
2648 return;
2649 } 2642 }
2650 2643
2651 rettv->vval.v_number = sign_place_from_dict(&argvars[0], &argvars[1], 2644 rettv->vval.v_number = sign_place_from_dict(&argvars[0], &argvars[1],
2652 &argvars[2], &argvars[3], dict); 2645 &argvars[2], &argvars[3], dict);
2653 } 2646 }
2870 return; 2863 return;
2871 } 2864 }
2872 2865
2873 if (argvars[1].v_type != VAR_UNKNOWN) 2866 if (argvars[1].v_type != VAR_UNKNOWN)
2874 { 2867 {
2875 if (argvars[1].v_type != VAR_DICT) 2868 if (check_for_dict_arg(argvars, 1) == FAIL)
2876 {
2877 emsg(_(e_dictionary_required));
2878 return; 2869 return;
2879 }
2880 dict = argvars[1].vval.v_dict; 2870 dict = argvars[1].vval.v_dict;
2881 } 2871 }
2882 2872
2883 rettv->vval.v_number = sign_unplace_from_dict(&argvars[0], dict); 2873 rettv->vval.v_number = sign_unplace_from_dict(&argvars[0], dict);
2884 } 2874 }