# HG changeset patch # User Bram Moolenaar # Date 1600115403 -7200 # Node ID 1634ca41e4d3b1b76b5d129612a9bd6fc88e52d1 # Parent 51375bedaefec9b3dab29ad0c3f8e10add88135a patch 8.2.1686: Vim9: "const!" not sufficiently tested Commit: https://github.com/vim/vim/commit/71abe4828974af495602ffaff63cf643a16de84b Author: Bram Moolenaar Date: Mon Sep 14 22:28:30 2020 +0200 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 --- 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 --- 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 */ /**/ + 1686, +/**/ 1685, /**/ 1684, diff --git a/src/vim9compile.c b/src/vim9compile.c --- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -5066,12 +5066,13 @@ compile_assignment(char_u *arg, exarg_T { 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)