diff options
-rw-r--r-- | src/evalfunc.c | 28 | ||||
-rw-r--r-- | src/testdir/test_vim9_func.vim | 16 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 44 insertions, 2 deletions
diff --git a/src/evalfunc.c b/src/evalfunc.c index 6ca450306..b8f1c2c38 100644 --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -347,6 +347,30 @@ ret_first_arg(int argcount, type_T **argtypes) return &t_void; } +/* + * Used for getqflist(): returns list if there is no argument, dict if there is + * one. + */ + static type_T * +ret_list_or_dict_0(int argcount, type_T **argtypes UNUSED) +{ + if (argcount > 0) + return &t_dict_any; + return &t_list_dict_any; +} + +/* + * Used for getloclist(): returns list if there is one argument, dict if there + * are two. + */ + static type_T * +ret_list_or_dict_1(int argcount, type_T **argtypes UNUSED) +{ + if (argcount > 1) + return &t_dict_any; + return &t_list_dict_any; +} + static type_T *ret_f_function(int argcount, type_T **argtypes); /* @@ -588,13 +612,13 @@ static funcentry_T global_functions[] = {"getimstatus", 0, 0, 0, ret_number, f_getimstatus}, {"getjumplist", 0, 2, FEARG_1, ret_list_any, f_getjumplist}, {"getline", 1, 2, FEARG_1, ret_f_getline, f_getline}, - {"getloclist", 1, 2, 0, ret_list_dict_any, f_getloclist}, + {"getloclist", 1, 2, 0, ret_list_or_dict_1, f_getloclist}, {"getmarklist", 0, 1, FEARG_1, ret_list_dict_any, f_getmarklist}, {"getmatches", 0, 1, 0, ret_list_dict_any, f_getmatches}, {"getmousepos", 0, 0, 0, ret_dict_number, f_getmousepos}, {"getpid", 0, 0, 0, ret_number, f_getpid}, {"getpos", 1, 1, FEARG_1, ret_list_number, f_getpos}, - {"getqflist", 0, 1, 0, ret_list_dict_any, f_getqflist}, + {"getqflist", 0, 1, 0, ret_list_or_dict_0, f_getqflist}, {"getreg", 0, 3, FEARG_1, ret_string, f_getreg}, {"getreginfo", 0, 1, FEARG_1, ret_dict_any, f_getreginfo}, {"getregtype", 0, 1, FEARG_1, ret_string, f_getregtype}, diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim index fbe73f7dc..1fc13c088 100644 --- a/src/testdir/test_vim9_func.vim +++ b/src/testdir/test_vim9_func.vim @@ -837,6 +837,22 @@ def Test_sort_return_type() res = [1, 2, 3]->sort() enddef +def Test_getqflist_return_type() + let l = getqflist() + assert_equal([], l) + + let d = getqflist(#{items: 0}) + assert_equal(#{items: []}, d) +enddef + +def Test_getloclist_return_type() + let l = getloclist(1) + assert_equal([], l) + + let d = getloclist(1, #{items: 0}) + assert_equal(#{items: []}, d) +enddef + def Line_continuation_in_def(dir: string = ''): string let path: string = empty(dir) \ ? 'empty' diff --git a/src/version.c b/src/version.c index 4406488bb..f0ed38030 100644 --- a/src/version.c +++ b/src/version.c @@ -755,6 +755,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1096, +/**/ 1095, /**/ 1094, |