diff options
author | Bram Moolenaar <Bram@vim.org> | 2019-08-16 22:22:31 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2019-08-16 22:22:31 +0200 |
commit | 9174639a82799011cfa0013cbc4c4709b3833bf0 (patch) | |
tree | fb637c1fd8bde68eb56ca3eabb06a5a1aab69e95 | |
parent | 9c272a9e52c914d6630f2cc887da89f63e7e983a (diff) |
patch 8.1.1863: confusing error when using a builtin function as methodv8.1.1863
Problem: Confusing error when using a builtin function as method while it
does not support that.
Solution: Add a specific error message.
-rw-r--r-- | src/evalfunc.c | 4 | ||||
-rw-r--r-- | src/testdir/test_method.vim | 4 | ||||
-rw-r--r-- | src/userfunc.c | 14 | ||||
-rw-r--r-- | src/version.c | 2 | ||||
-rw-r--r-- | src/vim.h | 1 |
5 files changed, 21 insertions, 4 deletions
diff --git a/src/evalfunc.c b/src/evalfunc.c index 814499331d..7d46f35886 100644 --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -1113,8 +1113,10 @@ call_internal_method( typval_T argv[MAX_FUNC_ARGS + 1]; fi = find_internal_func(name); - if (fi < 0 || global_functions[fi].f_argtype == 0) + if (fi < 0) return ERROR_UNKNOWN; + if (global_functions[fi].f_argtype == 0) + return ERROR_NOTMETHOD; if (argcount + 1 < global_functions[fi].f_min_argc) return ERROR_TOOFEW; if (argcount + 1 > global_functions[fi].f_max_argc) diff --git a/src/testdir/test_method.vim b/src/testdir/test_method.vim index 98c07fe341..ba13bb4973 100644 --- a/src/testdir/test_method.vim +++ b/src/testdir/test_method.vim @@ -134,3 +134,7 @@ func Test_method_lambda() " todo: lambda accepts more arguments than it consumes " call assert_fails('eval "text"->{x -> x .. " extended"}("more")', 'E99:') endfunc + +func Test_method_not_supported() + call assert_fails('eval 123->changenr()', 'E276:') +endfunc diff --git a/src/userfunc.c b/src/userfunc.c index 2bdc2b1cd9..fd25090118 100644 --- a/src/userfunc.c +++ b/src/userfunc.c @@ -1678,6 +1678,11 @@ call_func( case ERROR_UNKNOWN: emsg_funcname(N_("E117: Unknown function: %s"), name); break; + case ERROR_NOTMETHOD: + emsg_funcname( + N_("E276: Cannot use function as a method: %s"), + name); + break; case ERROR_DELETED: emsg_funcname(N_("E933: Function was deleted: %s"), name); break; @@ -1685,15 +1690,18 @@ call_func( emsg_funcname((char *)e_toomanyarg, name); break; case ERROR_TOOFEW: - emsg_funcname(N_("E119: Not enough arguments for function: %s"), + emsg_funcname( + N_("E119: Not enough arguments for function: %s"), name); break; case ERROR_SCRIPT: - emsg_funcname(N_("E120: Using <SID> not in a script context: %s"), + emsg_funcname( + N_("E120: Using <SID> not in a script context: %s"), name); break; case ERROR_DICT: - emsg_funcname(N_("E725: Calling dict function without Dictionary: %s"), + emsg_funcname( + N_("E725: Calling dict function without Dictionary: %s"), name); break; } diff --git a/src/version.c b/src/version.c index ba37a41156..3adfdd059b 100644 --- a/src/version.c +++ b/src/version.c @@ -770,6 +770,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1863, +/**/ 1862, /**/ 1861, @@ -2518,6 +2518,7 @@ typedef enum { #define ERROR_NONE 5 #define ERROR_OTHER 6 #define ERROR_DELETED 7 +#define ERROR_NOTMETHOD 8 // function cannot be used as a method /* flags for find_name_end() */ #define FNE_INCL_BR 1 /* include [] in name */ |