1
0
forked from aniani/vim

patch 8.2.3844: Vim9: no type error if assigning func(number) to func(string)

Problem:    Vim9: no type error if assigning a value with type func(number) to
            a variable of type func(string).
Solution:   Use check_type_maybe(): return MAYBE if a runtime type check is
            useful.  (issue #8492)
This commit is contained in:
Bram Moolenaar
2021-12-18 12:31:33 +00:00
parent 647ab4cede
commit 44a8977de4
5 changed files with 69 additions and 9 deletions

View File

@@ -1061,6 +1061,8 @@ need_type_where(
int silent,
int actual_is_const)
{
int ret;
if (expected == &t_bool && actual != &t_bool
&& (actual->tt_flags & TTFLAG_BOOL_OK))
{
@@ -1070,13 +1072,14 @@ need_type_where(
return OK;
}
if (check_type(expected, actual, FALSE, where) == OK)
ret = check_type_maybe(expected, actual, FALSE, where);
if (ret == OK)
return OK;
// If the actual type can be the expected type add a runtime check.
// If it's a constant a runtime check makes no sense.
if ((!actual_is_const || actual == &t_any)
&& use_typecheck(actual, expected))
if (ret == MAYBE || ((!actual_is_const || actual == &t_any)
&& use_typecheck(actual, expected)))
{
generate_TYPECHECK(cctx, expected, offset, where.wt_index);
return OK;