Mercurial > vim
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, ¬anum); | 2417 (void)tv_get_number_chk(&di->di_tv, ¬anum); |
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 } |