diff options
author | Bram Moolenaar <Bram@vim.org> | 2020-09-14 22:28:30 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2020-09-14 22:28:30 +0200 |
commit | 71abe4828974af495602ffaff63cf643a16de84b (patch) | |
tree | e1a6a8abda66aedec5511890c79d0e587ce0f98e | |
parent | 0b4c66c67a083f25816b9cdb8e76a41e02d9f560 (diff) | |
download | vim-git-71abe4828974af495602ffaff63cf643a16de84b.tar.gz |
patch 8.2.1686: Vim9: "const!" not sufficiently testedv8.2.1686
Problem: Vim9: "const!" not sufficiently tested.
Solution: Add a few more test cases. Fix type checking.
-rw-r--r-- | src/testdir/test_vim9_script.vim | 18 | ||||
-rw-r--r-- | src/version.c | 2 | ||||
-rw-r--r-- | src/vim9compile.c | 5 |
3 files changed, 23 insertions, 2 deletions
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 @@ -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 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) |