patch 8.1.1996: more functions can be used as methods
Problem: More functions can be used as methods.
Solution: Make various functions usable as a method.
diff --git a/src/evalfunc.c b/src/evalfunc.c
index 2949c89..0aa8fbf 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -336,6 +336,7 @@
#define FEARG_1 1 // base is the first argument
#define FEARG_2 2 // base is the second argument
#define FEARG_3 3 // base is the third argument
+#define FEARG_4 4 // base is the fourth argument
#define FEARG_LAST 9 // base is the last argument
static funcentry_T global_functions[] =
@@ -721,20 +722,20 @@
{"setenv", 2, 2, FEARG_2, f_setenv},
{"setfperm", 2, 2, FEARG_1, f_setfperm},
{"setline", 2, 2, FEARG_2, f_setline},
- {"setloclist", 2, 4, 0, f_setloclist},
- {"setmatches", 1, 2, 0, f_setmatches},
- {"setpos", 2, 2, 0, f_setpos},
- {"setqflist", 1, 3, 0, f_setqflist},
- {"setreg", 2, 3, 0, f_setreg},
- {"settabvar", 3, 3, 0, f_settabvar},
- {"settabwinvar", 4, 4, 0, f_settabwinvar},
- {"settagstack", 2, 3, 0, f_settagstack},
- {"setwinvar", 3, 3, 0, f_setwinvar},
+ {"setloclist", 2, 4, FEARG_2, f_setloclist},
+ {"setmatches", 1, 2, FEARG_1, f_setmatches},
+ {"setpos", 2, 2, FEARG_2, f_setpos},
+ {"setqflist", 1, 3, FEARG_1, f_setqflist},
+ {"setreg", 2, 3, FEARG_2, f_setreg},
+ {"settabvar", 3, 3, FEARG_3, f_settabvar},
+ {"settabwinvar", 4, 4, FEARG_4, f_settabwinvar},
+ {"settagstack", 2, 3, FEARG_2, f_settagstack},
+ {"setwinvar", 3, 3, FEARG_3, f_setwinvar},
#ifdef FEAT_CRYPT
- {"sha256", 1, 1, 0, f_sha256},
+ {"sha256", 1, 1, FEARG_1, f_sha256},
#endif
- {"shellescape", 1, 2, 0, f_shellescape},
- {"shiftwidth", 0, 1, 0, f_shiftwidth},
+ {"shellescape", 1, 2, FEARG_1, f_shellescape},
+ {"shiftwidth", 0, 1, FEARG_1, f_shiftwidth},
#ifdef FEAT_SIGNS
{"sign_define", 1, 2, FEARG_1, f_sign_define},
{"sign_getdefined", 0, 1, FEARG_1, f_sign_getdefined},
@@ -1060,6 +1061,16 @@
for (i = 2; i < argcount; ++i)
argv[i + 1] = argvars[i];
}
+ else if (global_functions[fi].f_argtype == FEARG_4)
+ {
+ // base value goes fourth
+ argv[0] = argvars[0];
+ argv[1] = argvars[1];
+ argv[2] = argvars[2];
+ argv[3] = *basetv;
+ for (i = 3; i < argcount; ++i)
+ argv[i + 1] = argvars[i];
+ }
else
{
// FEARG_1: base value goes first