Mercurial > vim
changeset 22363:6c3d15011081 v8.2.1730
patch 8.2.1730: Vim9: cannot use member of unknown type
Commit: https://github.com/vim/vim/commit/04bdd573d0a48e789eb92ed2a81e0dd732761391
Author: Bram Moolenaar <Bram@vim.org>
Date: Wed Sep 23 13:25:32 2020 +0200
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 https://github.com/vim/vim/issues/6997)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Wed, 23 Sep 2020 13:30:03 +0200 |
parents | 90bc9923a1df |
children | 436bae5a7f5b |
files | src/testdir/test_vim9_assign.vim src/version.c src/vim9compile.c |
diffstat | 3 files changed, 32 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- 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
--- 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,
--- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -5080,12 +5080,14 @@ compile_assignment(char_u *arg, exarg_T } 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; }