]> granicus.if.org Git - vim/commitdiff
patch 8.2.1459: Vim9: declaring script var in script does not infer the type v8.2.1459
authorBram Moolenaar <Bram@vim.org>
Sat, 15 Aug 2020 12:31:20 +0000 (14:31 +0200)
committerBram Moolenaar <Bram@vim.org>
Sat, 15 Aug 2020 12:31:20 +0000 (14:31 +0200)
Problem:    Vim9: declaring ascript variable at the script level does not
            infer the type.
Solution:   Get the type from the value. (closes #6716)

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

index 43c05fdf877e4c978f814a1938f0dcf23f4169fe..d948ddec51159ad0eb911d8aa3dbb1cc573d1a5b 100644 (file)
@@ -3049,7 +3049,10 @@ set_var_const(
                                                      + si->sn_var_vals.ga_len;
                sv->sv_name = di->di_key;
                sv->sv_tv = &di->di_tv;
-               sv->sv_type = type == NULL ? &t_any : type;
+               if (type == NULL)
+                   sv->sv_type = typval2type(tv, &si->sn_type_list);
+               else
+                   sv->sv_type = type;
                sv->sv_const = (flags & LET_IS_CONST);
                sv->sv_export = is_export;
                ++si->sn_var_vals.ga_len;
index 163b9480f06e4e3ac1c50f11fe9992c8d90f316e..d8e20e12f979a6f76f275f526c69f04a3820805a 100644 (file)
@@ -2914,12 +2914,20 @@ def Test_let_declaration()
     let s:other: number
     other = 1234
     g:other_var = other
+
+    # type is inferred
+    s:dict = {'a': 222}
+    def GetDictVal(key: any)
+      g:dict_val = s:dict[key]
+    enddef
+    GetDictVal('a')
   END
   CheckScriptSuccess(lines)
   assert_equal('', g:var_uninit)
   assert_equal('text', g:var_test)
   assert_equal('prefixed', g:var_prefixed)
   assert_equal(1234, g:other_var)
+  assert_equal(222, g:dict_val)
 
   unlet g:var_uninit
   unlet g:var_test
index b389ee560a7abe40d1bd77dabbbbe9c232c1c64f..4889fcdf8bfcc1143da6ea3829ae5a73bc21a139 100644 (file)
@@ -754,6 +754,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1459,
 /**/
     1458,
 /**/