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)
diff --git a/src/testdir/test_vim9_assign.vim b/src/testdir/test_vim9_assign.vim
index 65e1065..852db4a 100644
--- a/src/testdir/test_vim9_assign.vim
+++ b/src/testdir/test_vim9_assign.vim
@@ -676,6 +676,33 @@
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
diff --git a/src/version.c b/src/version.c
index aa821b2..655e349 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1730,
+/**/
1729,
/**/
1728,
diff --git a/src/vim9compile.c b/src/vim9compile.c
index 52651f3..06ee2f5 100644
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -5080,12 +5080,14 @@
}
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;
}