Mercurial > vim
changeset 22274:1634ca41e4d3 v8.2.1686
patch 8.2.1686: Vim9: "const!" not sufficiently tested
Commit: https://github.com/vim/vim/commit/71abe4828974af495602ffaff63cf643a16de84b
Author: Bram Moolenaar <Bram@vim.org>
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.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Mon, 14 Sep 2020 22:30:03 +0200 |
parents | 51375bedaefe |
children | 216928dbf078 |
files | src/testdir/test_vim9_script.vim src/version.c src/vim9compile.c |
diffstat | 3 files changed, 23 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- 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
--- 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,
--- 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)