]> granicus.if.org Git - vim/commitdiff
patch 9.0.0695: failing check for dictionary type for const any v9.0.0695
authorBram Moolenaar <Bram@vim.org>
Sat, 8 Oct 2022 13:39:36 +0000 (14:39 +0100)
committerBram Moolenaar <Bram@vim.org>
Sat, 8 Oct 2022 13:39:36 +0000 (14:39 +0100)
Problem:    Failing check for dictionary type for const any.
Solution:   Check for any type properly. (closes #11310)

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

index fd07fbfaee8ba4b76a7aada6aa21e1fa813dfb9b..8a4fd3b6c5e292e224692f3c64dec87ef7176206 100644 (file)
@@ -297,6 +297,14 @@ def Test_const()
     constdict->assert_equal({one: 1, two: {five: 55, six: 66}, three: 3})
   END
   v9.CheckDefAndScriptSuccess(lines)
+
+  # "any" type with const flag is recognized as "any"
+  lines =<< trim END
+      const dict: dict<any> = {foo: {bar: 42}}
+      const foo = dict.foo
+      assert_equal(v:t_number, type(foo.bar))
+  END
+  v9.CheckDefAndScriptSuccess(lines)
 enddef
 
 def Test_const_bang()
index 6813bf6bb7c7c6e1ce67c832e6c1816a7b12404a..530874a96f38f57f465c4de9481f4fcec4721430 100644 (file)
@@ -699,6 +699,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    695,
 /**/
     694,
 /**/
index 9c3b2a9117c84de5e9afb5a05ac6573c015d5896..600fab466120b32992b135a85c2ebc17c8dbb422 100644 (file)
@@ -1831,7 +1831,8 @@ generate_STRINGMEMBER(cctx_T *cctx, char_u *name, size_t len)
 
     // check for dict type
     type = get_type_on_stack(cctx, 0);
-    if (type->tt_type != VAR_DICT && type != &t_any && type != &t_unknown)
+    if (type->tt_type != VAR_DICT
+                  && type->tt_type != VAR_ANY && type->tt_type != VAR_UNKNOWN)
     {
        char *tofree;
 
@@ -1843,7 +1844,7 @@ generate_STRINGMEMBER(cctx_T *cctx, char_u *name, size_t len)
     // change dict type to dict member type
     if (type->tt_type == VAR_DICT)
     {
-       type_T *ntype = type->tt_member == &t_unknown
+       type_T *ntype = type->tt_member->tt_type == VAR_UNKNOWN
                                                    ? &t_any : type->tt_member;
        set_type_on_stack(cctx, ntype, 0);
     }