From: Bram Moolenaar Date: Mon, 14 Sep 2020 20:28:30 +0000 (+0200) Subject: patch 8.2.1686: Vim9: "const!" not sufficiently tested X-Git-Tag: v8.2.1686 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=71abe4828974af495602ffaff63cf643a16de84b;p=vim patch 8.2.1686: Vim9: "const!" not sufficiently tested Problem: Vim9: "const!" not sufficiently tested. Solution: Add a few more test cases. Fix type checking. --- diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim index 904ee634d..936c7dd19 100644 --- a/src/testdir/test_vim9_script.vim +++ b/src/testdir/test_vim9_script.vim @@ -831,6 +831,24 @@ def Test_const() list->assert_equal([4, 2, 3]) const! other = [5, 6, 7] other->assert_equal([5, 6, 7]) + + let varlist = [7, 8] + const! constlist = [1, varlist, 3] + varlist[0] = 77 + # TODO: does not work yet + # constlist[1][1] = 88 + let cl = constlist[1] + cl[1] = 88 + constlist->assert_equal([1, [77, 88], 3]) + + let vardict = #{five: 5, six: 6} + const! constdict = #{one: 1, two: vardict, three: 3} + vardict['five'] = 55 + # TODO: does not work yet + # constdict['two']['six'] = 66 + let cd = constdict['two'] + cd['six'] = 66 + constdict->assert_equal(#{one: 1, two: #{five: 55, six: 66}, three: 3}) END CheckDefAndScriptSuccess(lines) enddef diff --git a/src/version.c b/src/version.c index f958df91d..a0a698371 100644 --- a/src/version.c +++ b/src/version.c @@ -750,6 +750,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1686, /**/ 1685, /**/ diff --git a/src/vim9compile.c b/src/vim9compile.c index 103e696bf..e8a3a21db 100644 --- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -5066,12 +5066,13 @@ compile_assignment(char_u *arg, exarg_T *eap, cmdidx_T cmdidx, cctx_T *cctx) { type_T *use_type = lvar->lv_type; - // without operator type is here, otherwise below + // without operator check type here, otherwise below if (has_index) { use_type = use_type->tt_member; if (use_type == NULL) - use_type = &t_void; + // could be indexing "any" + use_type = &t_any; } if (need_type(stacktype, use_type, -1, cctx, FALSE) == FAIL)