mirror of
https://github.com/vim/vim.git
synced 2025-09-23 03:43:49 -04:00
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:
@@ -676,6 +676,33 @@ def Test_assign_dict()
|
|||||||
assert_equal({'0': 0, '1': 1, '2': 2}, nrd)
|
assert_equal({'0': 0, '1': 1, '2': 2}, nrd)
|
||||||
enddef
|
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()
|
def Test_assign_lambda()
|
||||||
# check if assign a lambda to a variable which type is func or any.
|
# check if assign a lambda to a variable which type is func or any.
|
||||||
let lines =<< trim END
|
let lines =<< trim END
|
||||||
|
@@ -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 */
|
||||||
|
/**/
|
||||||
|
1730,
|
||||||
/**/
|
/**/
|
||||||
1729,
|
1729,
|
||||||
/**/
|
/**/
|
||||||
|
@@ -5080,12 +5080,14 @@ compile_assignment(char_u *arg, exarg_T *eap, cmdidx_T cmdidx, cctx_T *cctx)
|
|||||||
}
|
}
|
||||||
else
|
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.
|
// for a variable that implies &t_any.
|
||||||
if (stacktype == &t_list_empty)
|
if (stacktype == &t_list_empty)
|
||||||
lvar->lv_type = &t_list_any;
|
lvar->lv_type = &t_list_any;
|
||||||
else if (stacktype == &t_dict_empty)
|
else if (stacktype == &t_dict_empty)
|
||||||
lvar->lv_type = &t_dict_any;
|
lvar->lv_type = &t_dict_any;
|
||||||
|
else if (stacktype == &t_unknown)
|
||||||
|
lvar->lv_type = &t_any;
|
||||||
else
|
else
|
||||||
lvar->lv_type = stacktype;
|
lvar->lv_type = stacktype;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user