@@ -98,8 +98,6 @@ static void f_line2byte(typval_T *argvars, typval_T *rettv);
9898#ifdef FEAT_LUA
9999static void f_luaeval (typval_T * argvars , typval_T * rettv );
100100#endif
101- static void f_maparg (typval_T * argvars , typval_T * rettv );
102- static void f_mapcheck (typval_T * argvars , typval_T * rettv );
103101static void f_match (typval_T * argvars , typval_T * rettv );
104102static void f_matchend (typval_T * argvars , typval_T * rettv );
105103static void f_matchlist (typval_T * argvars , typval_T * rettv );
@@ -932,17 +930,29 @@ ret_first_arg(int argcount, type_T **argtypes)
932930 if (argcount > 0 )
933931 return argtypes [0 ];
934932 return & t_void ;
933+ }
934+ static type_T *
935+ ret_repeat (int argcount , type_T * * argtypes )
936+ {
937+ if (argcount == 0 )
938+ return & t_any ;
939+ if (argtypes [0 ] == & t_number )
940+ return & t_string ;
941+ return argtypes [0 ];
935942}
936943// for map(): returns first argument but item type may differ
937944 static type_T *
938- ret_first_cont (int argcount UNUSED , type_T * * argtypes )
945+ ret_first_cont (int argcount , type_T * * argtypes )
939946{
940- if (argtypes [0 ]-> tt_type == VAR_LIST )
941- return & t_list_any ;
942- if (argtypes [0 ]-> tt_type == VAR_DICT )
943- return & t_dict_any ;
944- if (argtypes [0 ]-> tt_type == VAR_BLOB )
945- return argtypes [0 ];
947+ if (argcount > 0 )
948+ {
949+ if (argtypes [0 ]-> tt_type == VAR_LIST )
950+ return & t_list_any ;
951+ if (argtypes [0 ]-> tt_type == VAR_DICT )
952+ return & t_dict_any ;
953+ if (argtypes [0 ]-> tt_type == VAR_BLOB )
954+ return argtypes [0 ];
955+ }
946956 return & t_any ;
947957}
948958
@@ -982,9 +992,9 @@ ret_argv(int argcount, type_T **argtypes UNUSED)
982992}
983993
984994 static type_T *
985- ret_remove (int argcount UNUSED , type_T * * argtypes )
995+ ret_remove (int argcount , type_T * * argtypes )
986996{
987- if (argtypes != NULL )
997+ if (argcount > 0 )
988998 {
989999 if (argtypes [0 ]-> tt_type == VAR_LIST
9901000 || argtypes [0 ]-> tt_type == VAR_DICT )
@@ -1815,7 +1825,7 @@ static funcentry_T global_functions[] =
18151825 {"rename" , 2 , 2 , FEARG_1 , arg2_string ,
18161826 ret_number_bool , f_rename },
18171827 {"repeat" , 2 , 2 , FEARG_1 , arg2_repeat ,
1818- ret_first_arg , f_repeat },
1828+ ret_repeat , f_repeat },
18191829 {"resolve" , 1 , 1 , FEARG_1 , arg1_string ,
18201830 ret_string , f_resolve },
18211831 {"reverse" , 1 , 1 , FEARG_1 , arg1_list_or_blob ,
@@ -2441,6 +2451,7 @@ internal_func_get_argcount(int idx, int *argcount, int *min_argcount)
24412451 * Call the "f_retfunc" function to obtain the return type of function "idx".
24422452 * "argtypes" is the list of argument types or NULL when there are no
24432453 * arguments.
2454+ * "argcount" may be less than the actual count when only getting the type.
24442455 */
24452456 type_T *
24462457internal_func_ret_type (int idx , int argcount , type_T * * argtypes )
@@ -6769,40 +6780,6 @@ f_luaeval(typval_T *argvars, typval_T *rettv)
67696780}
67706781#endif
67716782
6772- /*
6773- * "maparg()" function
6774- */
6775- static void
6776- f_maparg (typval_T * argvars , typval_T * rettv )
6777- {
6778- if (in_vim9script ()
6779- && (check_for_string_arg (argvars , 0 ) == FAIL
6780- || check_for_opt_string_arg (argvars , 1 ) == FAIL
6781- || (argvars [1 ].v_type != VAR_UNKNOWN
6782- && (check_for_opt_bool_arg (argvars , 2 ) == FAIL
6783- || (argvars [2 ].v_type != VAR_UNKNOWN
6784- && check_for_opt_bool_arg (argvars , 3 ) == FAIL )))))
6785- return ;
6786-
6787- get_maparg (argvars , rettv , TRUE);
6788- }
6789-
6790- /*
6791- * "mapcheck()" function
6792- */
6793- static void
6794- f_mapcheck (typval_T * argvars , typval_T * rettv )
6795- {
6796- if (in_vim9script ()
6797- && (check_for_string_arg (argvars , 0 ) == FAIL
6798- || check_for_opt_string_arg (argvars , 1 ) == FAIL
6799- || (argvars [1 ].v_type != VAR_UNKNOWN
6800- && check_for_opt_bool_arg (argvars , 2 ) == FAIL )))
6801- return ;
6802-
6803- get_maparg (argvars , rettv , FALSE);
6804- }
6805-
68066783typedef enum
68076784{
68086785 MATCH_END , // matchend()
0 commit comments