diff options
author | Bram Moolenaar <Bram@vim.org> | 2020-07-09 21:20:47 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2020-07-09 21:20:47 +0200 |
commit | 389df259c49d1ca4f7aa129b702f6083985b1e73 (patch) | |
tree | 8c9d44999305e3660ccf09dbd2d4b7aa935744a9 /src/evalfunc.c | |
parent | ae97b94176062d30ea8c68bb83cde034c5150c78 (diff) |
patch 8.2.1167: Vim9: builtin function method call only supports first argv8.2.1167
Problem: Vim9: builtin function method call only supports first argument.
Solution: Shift arguments when needed. (closes #6305, closes #6419)
Diffstat (limited to 'src/evalfunc.c')
-rw-r--r-- | src/evalfunc.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/src/evalfunc.c b/src/evalfunc.c index 0a100748d9..86a676ca86 100644 --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -465,8 +465,8 @@ static funcentry_T global_functions[] = {"acos", 1, 1, FEARG_1, ret_float, FLOAT_FUNC(f_acos)}, {"add", 2, 2, FEARG_1, ret_first_arg, f_add}, {"and", 2, 2, FEARG_1, ret_number, f_and}, - {"append", 2, 2, FEARG_LAST, ret_number, f_append}, - {"appendbufline", 3, 3, FEARG_LAST, ret_number, f_appendbufline}, + {"append", 2, 2, FEARG_2, ret_number, f_append}, + {"appendbufline", 3, 3, FEARG_2, ret_number, f_appendbufline}, {"argc", 0, 1, 0, ret_number, f_argc}, {"argidx", 0, 0, 0, ret_number, f_argidx}, {"arglistid", 0, 2, 0, ret_number, f_arglistid}, @@ -1191,7 +1191,9 @@ internal_func_ret_type(int idx, int argcount, type_T **argtypes) /* * Check the argument count to use for internal function "idx". - * Returns OK or FAIL; + * Returns -1 for failure, 0 if no method base accepted, 1 if method base is + * first argument, 2 if method base is second argument, etc. 9 if method base + * is last argument. */ int check_internal_func(int idx, int argcount) @@ -1204,14 +1206,14 @@ check_internal_func(int idx, int argcount) else if (argcount > global_functions[idx].f_max_argc) res = FCERR_TOOMANY; else - return OK; + return global_functions[idx].f_argtype; name = internal_func_name(idx); if (res == FCERR_TOOMANY) semsg(_(e_toomanyarg), name); else semsg(_(e_toofewarg), name); - return FAIL; + return -1; } int |