1
0
forked from aniani/vim

patch 8.2.1708: Vim9: error message for function has unpritable characters

Problem:    Vim9: error message for function has unpritable characters.
Solution:   use printable_func_name(). (closes #6965)
This commit is contained in:
Bram Moolenaar 2020-09-18 22:42:00 +02:00
parent 2bbada8116
commit b185a40745
3 changed files with 48 additions and 2 deletions

View File

@ -280,6 +280,50 @@ def Test_call_wrong_args()
Func([]) Func([])
END END
CheckScriptFailure(lines, 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 5) CheckScriptFailure(lines, 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 5)
lines =<< trim END
vim9script
def FuncOne(nr: number)
echo nr
enddef
def FuncTwo()
FuncOne()
enddef
defcompile
END
writefile(lines, 'Xscript')
let didCatch = false
try
source Xscript
catch
assert_match('E119: Not enough arguments for function: <SNR>\d\+_FuncOne', v:exception)
assert_match('Xscript\[8\]..function <SNR>\d\+_FuncTwo, line 1', v:throwpoint)
didCatch = true
endtry
assert_true(didCatch)
lines =<< trim END
vim9script
def FuncOne(nr: number)
echo nr
enddef
def FuncTwo()
FuncOne(1, 2)
enddef
defcompile
END
writefile(lines, 'Xscript')
didCatch = false
try
source Xscript
catch
assert_match('E118: Too many arguments for function: <SNR>\d\+_FuncOne', v:exception)
assert_match('Xscript\[8\]..function <SNR>\d\+_FuncTwo, line 1', v:throwpoint)
didCatch = true
endtry
assert_true(didCatch)
delete('Xscript')
enddef enddef
" Default arg and varargs " Default arg and varargs

View File

@ -750,6 +750,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
1708,
/**/ /**/
1707, 1707,
/**/ /**/

View File

@ -1406,12 +1406,12 @@ generate_CALL(cctx_T *cctx, ufunc_T *ufunc, int pushed_argcount)
RETURN_OK_IF_SKIP(cctx); RETURN_OK_IF_SKIP(cctx);
if (argcount > regular_args && !has_varargs(ufunc)) if (argcount > regular_args && !has_varargs(ufunc))
{ {
semsg(_(e_toomanyarg), ufunc->uf_name); semsg(_(e_toomanyarg), printable_func_name(ufunc));
return FAIL; return FAIL;
} }
if (argcount < regular_args - ufunc->uf_def_args.ga_len) if (argcount < regular_args - ufunc->uf_def_args.ga_len)
{ {
semsg(_(e_toofewarg), ufunc->uf_name); semsg(_(e_toofewarg), printable_func_name(ufunc));
return FAIL; return FAIL;
} }