Mercurial > vim
diff src/evalfunc.c @ 21232:3f14e0d4a4dd v8.2.1167
patch 8.2.1167: Vim9: builtin function method call only supports first arg
Commit: https://github.com/vim/vim/commit/389df259c49d1ca4f7aa129b702f6083985b1e73
Author: Bram Moolenaar <Bram@vim.org>
Date: Thu Jul 9 21:20:47 2020 +0200
patch 8.2.1167: Vim9: builtin function method call only supports first arg
Problem: Vim9: builtin function method call only supports first argument.
Solution: Shift arguments when needed. (closes https://github.com/vim/vim/issues/6305, closes https://github.com/vim/vim/issues/6419)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Thu, 09 Jul 2020 21:30:03 +0200 |
parents | 34667dc9207b |
children | 1689128baf4a |
line wrap: on
line diff
--- 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 argc /* * 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 argcoun 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