patch 8.2.1730: Vim9: cannot use member of unknown type

Problem:    Vim9: cannot use member of unknown type.
Solution:   When type is unknown us "any". (closes #6997)
This commit is contained in:
Bram Moolenaar 2020-09-23 13:25:32 +02:00
parent 189832bf66
commit 04bdd573d0
3 changed files with 32 additions and 1 deletions

View File

@ -676,6 +676,33 @@ def Test_assign_dict()
assert_equal({'0': 0, '1': 1, '2': 2}, nrd)
enddef
def Test_assign_dict_unknown_type()
let lines =<< trim END
vim9script
let mylist = []
mylist += [#{one: 'one'}]
def Func()
let dd = mylist[0]
assert_equal('one', dd.one)
enddef
Func()
END
CheckScriptSuccess(lines)
# doesn't work yet
#lines =<< trim END
# vim9script
# let mylist = [[]]
# mylist[0] += [#{one: 'one'}]
# def Func()
# let dd = mylist[0][0]
# assert_equal('one', dd.one)
# enddef
# Func()
#END
#CheckScriptSuccess(lines)
enddef
def Test_assign_lambda()
# check if assign a lambda to a variable which type is func or any.
let lines =<< trim END

View File

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

View File

@ -5080,12 +5080,14 @@ compile_assignment(char_u *arg, exarg_T *eap, cmdidx_T cmdidx, cctx_T *cctx)
}
else
{
// An empty list or dict has a &t_void member,
// An empty list or dict has a &t_unknown member,
// for a variable that implies &t_any.
if (stacktype == &t_list_empty)
lvar->lv_type = &t_list_any;
else if (stacktype == &t_dict_empty)
lvar->lv_type = &t_dict_any;
else if (stacktype == &t_unknown)
lvar->lv_type = &t_any;
else
lvar->lv_type = stacktype;
}