changeset 21170:8c494353c6bc v8.2.1136

patch 8.2.1136: Vim9: return type of argv() is always any Commit: https://github.com/vim/vim/commit/846178a72ca0860073d47fc0dc95f98d15f1d921 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Jul 5 17:04:13 2020 +0200 patch 8.2.1136: Vim9: return type of argv() is always any Problem: Vim9: return type of argv() is always any. Solution: Use list<string> if there is no argument.
author Bram Moolenaar <Bram@vim.org>
date Sun, 05 Jul 2020 17:15:03 +0200
parents 93bfa89a916f
children 0472770ff04e
files src/evalfunc.c src/testdir/test_vim9_func.vim src/version.c
diffstat 3 files changed, 23 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -371,6 +371,17 @@ ret_list_or_dict_1(int argcount, type_T 
     return &t_list_dict_any;
 }
 
+    static type_T *
+ret_argv(int argcount, type_T **argtypes UNUSED)
+{
+    // argv() returns list of strings
+    if (argcount == 0)
+	return &t_list_string;
+
+    // argv(0) returns a string, but argv(-1] returns a list
+    return &t_any;
+}
+
 static type_T *ret_f_function(int argcount, type_T **argtypes);
 
 /*
@@ -448,7 +459,7 @@ static funcentry_T global_functions[] =
     {"argc",		0, 1, 0,	  ret_number,	f_argc},
     {"argidx",		0, 0, 0,	  ret_number,	f_argidx},
     {"arglistid",	0, 2, 0,	  ret_number,	f_arglistid},
-    {"argv",		0, 2, 0,	  ret_any,	f_argv},
+    {"argv",		0, 2, 0,	  ret_argv,	f_argv},
     {"asin",		1, 1, FEARG_1,	  ret_float,	FLOAT_FUNC(f_asin)},
     {"assert_beeps",	1, 2, FEARG_1,	  ret_number,	f_assert_beeps},
     {"assert_equal",	2, 3, FEARG_2,	  ret_number,	f_assert_equal},
--- a/src/testdir/test_vim9_func.vim
+++ b/src/testdir/test_vim9_func.vim
@@ -610,6 +610,15 @@ def Test_repeat_return_type()
   assert_equal(6, res)
 enddef
 
+def Test_argv_return_type()
+  next fileone filetwo
+  let res = ''
+  for name in argv()
+    res ..= name
+  endfor
+  assert_equal('fileonefiletwo', res)
+enddef
+
 def Test_func_type_part()
   let RefVoid: func: void
   RefVoid = FuncNoArgNoRet
--- 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 */
 /**/
+    1136,
+/**/
     1135,
 /**/
     1134,