summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2019-08-16 22:22:31 +0200
committerBram Moolenaar <Bram@vim.org>2019-08-16 22:22:31 +0200
commit9174639a82799011cfa0013cbc4c4709b3833bf0 (patch)
treefb637c1fd8bde68eb56ca3eabb06a5a1aab69e95
parent9c272a9e52c914d6630f2cc887da89f63e7e983a (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.c4
-rw-r--r--src/testdir/test_method.vim4
-rw-r--r--src/userfunc.c14
-rw-r--r--src/version.c2
-rw-r--r--src/vim.h1
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,
diff --git a/src/vim.h b/src/vim.h
index 1011be7c68..4107f6b1c7 100644
--- a/src/vim.h
+++ b/src/vim.h
@@ -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 */