0
0
mirror of https://github.com/vim/vim.git synced 2025-09-23 03:43:49 -04:00

patch 8.2.1271: Vim9: Error for Funcref function argument type

Problem:    Vim9: Error for Funcref function argument type.
Solution:   Find the actual function type if possible. (issue #6507)
This commit is contained in:
Bram Moolenaar
2020-07-22 20:16:11 +02:00
parent 2f1980f7b7
commit 0f60e80f9b
3 changed files with 37 additions and 0 deletions

View File

@@ -599,6 +599,28 @@ check_argtype(type_T *expected, typval_T *actual_tv)
member.tt_member = &t_any;
actual.tt_member = &member;
}
else if (actual_tv->v_type == VAR_FUNC || actual_tv->v_type == VAR_PARTIAL)
{
char_u *name = NULL;
ufunc_T *ufunc = NULL;
if (actual_tv->v_type == VAR_PARTIAL)
{
if (actual_tv->vval.v_partial->pt_func != NULL)
ufunc = actual_tv->vval.v_partial->pt_func;
else
name = actual_tv->vval.v_partial->pt_name;
}
else
name = actual_tv->vval.v_string;
if (name != NULL)
// TODO: how about a builtin function?
ufunc = find_func(name, FALSE, NULL);
if (ufunc != NULL && ufunc->uf_func_type != NULL)
actual = *ufunc->uf_func_type;
else
actual.tt_member = &t_any;
}
else
actual.tt_member = &t_any;
return check_type(expected, &actual, TRUE);