@@ -1011,79 +1011,37 @@ eval_expr(char_u *arg, char_u **nextcmd)
10111011
10121012/*
10131013 * Call some Vim script function and return the result in "*rettv".
1014- * Uses argv[argc] for the function arguments. Only Number and String
1015- * arguments are currently supported .
1014+ * Uses argv[0] to argv[ argc - 1 ] for the function arguments. argv[argc]
1015+ * should have type VAR_UNKNOWN .
10161016 * Returns OK or FAIL.
10171017 */
10181018 int
10191019call_vim_function (
10201020 char_u * func ,
10211021 int argc ,
1022- char_u * * argv ,
1023- int safe , /* use the sandbox */
1024- int str_arg_only , /* all arguments are strings */
1025- typval_T * rettv )
1022+ typval_T * argv ,
1023+ typval_T * rettv ,
1024+ int safe ) /* use the sandbox */
10261025{
1027- typval_T * argvars ;
1028- varnumber_T n ;
1029- int len ;
1030- int i ;
10311026 int doesrange ;
10321027 void * save_funccalp = NULL ;
10331028 int ret ;
10341029
1035- argvars = (typval_T * )alloc ((unsigned )((argc + 1 ) * sizeof (typval_T )));
1036- if (argvars == NULL )
1037- return FAIL ;
1038-
1039- for (i = 0 ; i < argc ; i ++ )
1040- {
1041- /* Pass a NULL or empty argument as an empty string */
1042- if (argv [i ] == NULL || * argv [i ] == NUL )
1043- {
1044- argvars [i ].v_type = VAR_STRING ;
1045- argvars [i ].vval .v_string = (char_u * )"" ;
1046- continue ;
1047- }
1048-
1049- if (str_arg_only )
1050- len = 0 ;
1051- else
1052- {
1053- /* Recognize a number argument, the others must be strings. A dash
1054- * is a string too. */
1055- vim_str2nr (argv [i ], NULL , & len , STR2NR_ALL , & n , NULL , 0 );
1056- if (len == 1 && * argv [i ] == '-' )
1057- len = 0 ;
1058- }
1059- if (len != 0 && len == (int )STRLEN (argv [i ]))
1060- {
1061- argvars [i ].v_type = VAR_NUMBER ;
1062- argvars [i ].vval .v_number = n ;
1063- }
1064- else
1065- {
1066- argvars [i ].v_type = VAR_STRING ;
1067- argvars [i ].vval .v_string = argv [i ];
1068- }
1069- }
1070-
10711030 if (safe )
10721031 {
10731032 save_funccalp = save_funccal ();
10741033 ++ sandbox ;
10751034 }
10761035
10771036 rettv -> v_type = VAR_UNKNOWN ; /* clear_tv() uses this */
1078- ret = call_func (func , (int )STRLEN (func ), rettv , argc , argvars , NULL ,
1037+ ret = call_func (func , (int )STRLEN (func ), rettv , argc , argv , NULL ,
10791038 curwin -> w_cursor .lnum , curwin -> w_cursor .lnum ,
10801039 & doesrange , TRUE, NULL , NULL );
10811040 if (safe )
10821041 {
10831042 -- sandbox ;
10841043 restore_funccal (save_funccalp );
10851044 }
1086- vim_free (argvars );
10871045
10881046 if (ret == FAIL )
10891047 clear_tv (rettv );
@@ -1094,20 +1052,20 @@ call_vim_function(
10941052/*
10951053 * Call Vim script function "func" and return the result as a number.
10961054 * Returns -1 when calling the function fails.
1097- * Uses argv[argc] for the function arguments.
1055+ * Uses argv[0] to argv[argc - 1] for the function arguments. argv[argc] should
1056+ * have type VAR_UNKNOWN.
10981057 */
10991058 varnumber_T
11001059call_func_retnr (
11011060 char_u * func ,
11021061 int argc ,
1103- char_u * * argv ,
1062+ typval_T * argv ,
11041063 int safe ) /* use the sandbox */
11051064{
11061065 typval_T rettv ;
11071066 varnumber_T retval ;
11081067
1109- /* All arguments are passed as strings, no conversion to number. */
1110- if (call_vim_function (func , argc , argv , safe , TRUE, & rettv ) == FAIL )
1068+ if (call_vim_function (func , argc , argv , & rettv , safe ) == FAIL )
11111069 return -1 ;
11121070
11131071 retval = get_tv_number_chk (& rettv , NULL );
@@ -1122,20 +1080,20 @@ call_func_retnr(
11221080/*
11231081 * Call Vim script function "func" and return the result as a string.
11241082 * Returns NULL when calling the function fails.
1125- * Uses argv[argc] for the function arguments.
1083+ * Uses argv[0] to argv[argc - 1] for the function arguments. argv[argc] should
1084+ * have type VAR_UNKNOWN.
11261085 */
11271086 void *
11281087call_func_retstr (
11291088 char_u * func ,
11301089 int argc ,
1131- char_u * * argv ,
1090+ typval_T * argv ,
11321091 int safe ) /* use the sandbox */
11331092{
11341093 typval_T rettv ;
11351094 char_u * retval ;
11361095
1137- /* All arguments are passed as strings, no conversion to number. */
1138- if (call_vim_function (func , argc , argv , safe , TRUE, & rettv ) == FAIL )
1096+ if (call_vim_function (func , argc , argv , & rettv , safe ) == FAIL )
11391097 return NULL ;
11401098
11411099 retval = vim_strsave (get_tv_string (& rettv ));
@@ -1146,20 +1104,20 @@ call_func_retstr(
11461104
11471105/*
11481106 * Call Vim script function "func" and return the result as a List.
1149- * Uses argv[argc] for the function arguments.
1107+ * Uses argv[0] to argv[argc - 1] for the function arguments. argv[argc] should
1108+ * have type VAR_UNKNOWN.
11501109 * Returns NULL when there is something wrong.
11511110 */
11521111 void *
11531112call_func_retlist (
11541113 char_u * func ,
11551114 int argc ,
1156- char_u * * argv ,
1115+ typval_T * argv ,
11571116 int safe ) /* use the sandbox */
11581117{
11591118 typval_T rettv ;
11601119
1161- /* All arguments are passed as strings, no conversion to number. */
1162- if (call_vim_function (func , argc , argv , safe , TRUE, & rettv ) == FAIL )
1120+ if (call_vim_function (func , argc , argv , & rettv , safe ) == FAIL )
11631121 return NULL ;
11641122
11651123 if (rettv .v_type != VAR_LIST )
0 commit comments