]> granicus.if.org Git - vim/commitdiff
patch 8.2.1686: Vim9: "const!" not sufficiently tested v8.2.1686
authorBram Moolenaar <Bram@vim.org>
Mon, 14 Sep 2020 20:28:30 +0000 (22:28 +0200)
committerBram Moolenaar <Bram@vim.org>
Mon, 14 Sep 2020 20:28:30 +0000 (22:28 +0200)
Problem:    Vim9: "const!" not sufficiently tested.
Solution:   Add a few more test cases.  Fix type checking.

src/testdir/test_vim9_script.vim
src/version.c
src/vim9compile.c

index 904ee634de1a3ba268e3ffd431ca2ba865052039..936c7dd1957db57d4be3799705b3412c44fac70a 100644 (file)
@@ -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
index f958df91d01ccdd478dabd051e8e0f910e95e904..a0a6983714d5721b665eb17dd45472cabcc805ce 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1686,
 /**/
     1685,
 /**/
index 103e696bf03ce0609b4710f5fe3f72794a284d4b..e8a3a21dbd27c889800c29fa658bdb16f260e5a2 100644 (file)
@@ -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)