summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-09-14 22:28:30 +0200
committerBram Moolenaar <Bram@vim.org>2020-09-14 22:28:30 +0200
commit71abe4828974af495602ffaff63cf643a16de84b (patch)
treee1a6a8abda66aedec5511890c79d0e587ce0f98e
parent0b4c66c67a083f25816b9cdb8e76a41e02d9f560 (diff)
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.vim18
-rw-r--r--src/version.c2
-rw-r--r--src/vim9compile.c5
3 files changed, 23 insertions, 2 deletions
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index 904ee634de..936c7dd195 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 f958df91d0..a0a6983714 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 103e696bf0..e8a3a21dbd 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)