summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/testdir/test_vim9_assign.vim27
-rw-r--r--src/version.c2
-rw-r--r--src/vim9compile.c4
3 files changed, 32 insertions, 1 deletions
diff --git a/src/testdir/test_vim9_assign.vim b/src/testdir/test_vim9_assign.vim
index 65e106593..852db4ad7 100644
--- a/src/testdir/test_vim9_assign.vim
+++ b/src/testdir/test_vim9_assign.vim
@@ -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
diff --git a/src/version.c b/src/version.c
index aa821b2d8..655e34919 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
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 52651f36a..06ee2f5a8 100644
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -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;
}