vim-patch:8.1.1863: confusing error when using a builtin function as method

Problem:    Confusing error when using a builtin function as method while it
            does not support that.
Solution:   Add a specific error message.
9174639a82
This commit is contained in:
Sean Dewar
2021-08-07 15:10:28 +01:00
parent 287a77ef51
commit 98dfe4adc4
4 changed files with 11 additions and 1 deletions

View File

@@ -199,8 +199,10 @@ int call_internal_method(const char_u *const fname, const int argcount,
FUNC_ATTR_NONNULL_ALL FUNC_ATTR_NONNULL_ALL
{ {
const VimLFuncDef *const fdef = find_internal_func((const char *)fname); const VimLFuncDef *const fdef = find_internal_func((const char *)fname);
if (fdef == NULL || fdef->base_arg == BASE_NONE) { if (fdef == NULL) {
return ERROR_UNKNOWN; return ERROR_UNKNOWN;
} else if (fdef->base_arg == BASE_NONE) {
return ERROR_NOTMETHOD;
} else if (argcount + 1 < fdef->min_argc) { } else if (argcount + 1 < fdef->min_argc) {
return ERROR_TOOFEW; return ERROR_TOOFEW;
} else if (argcount + 1 > fdef->max_argc) { } else if (argcount + 1 > fdef->max_argc) {

View File

@@ -1399,6 +1399,9 @@ static void user_func_error(int error, const char_u *name)
case ERROR_UNKNOWN: case ERROR_UNKNOWN:
emsg_funcname(N_("E117: Unknown function: %s"), name); emsg_funcname(N_("E117: Unknown function: %s"), name);
break; break;
case ERROR_NOTMETHOD:
emsg_funcname(N_("E276: Cannot use function as a method: %s"), name);
break;
case ERROR_DELETED: case ERROR_DELETED:
emsg_funcname(N_("E933: Function was deleted: %s"), name); emsg_funcname(N_("E933: Function was deleted: %s"), name);
break; break;

View File

@@ -28,6 +28,7 @@ typedef enum {
ERROR_OTHER, ERROR_OTHER,
ERROR_BOTH, ERROR_BOTH,
ERROR_DELETED, ERROR_DELETED,
ERROR_NOTMETHOD,
} FnameTransError; } FnameTransError;
/// Used in funcexe_T. Returns the new argcount. /// Used in funcexe_T. Returns the new argcount.

View File

@@ -140,4 +140,8 @@ func Test_method_lambda()
" call assert_fails('eval "text"->{x -> x .. " extended"}("more")', 'E99:') " call assert_fails('eval "text"->{x -> x .. " extended"}("more")', 'E99:')
endfunc endfunc
func Test_method_not_supported()
call assert_fails('eval 123->changenr()', 'E276:')
endfunc
" vim: shiftwidth=2 sts=2 expandtab " vim: shiftwidth=2 sts=2 expandtab