changeset 21819:e3b429b995a6 v8.2.1459

patch 8.2.1459: Vim9: declaring script var in script does not infer the type Commit: https://github.com/vim/vim/commit/53b29e4845857d76ca7df1ff2fd0e03c3eeb82e1 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Aug 15 14:31:20 2020 +0200 patch 8.2.1459: Vim9: declaring script var in script does not infer the type Problem: Vim9: declaring ascript variable at the script level does not infer the type. Solution: Get the type from the value. (closes #6716)
author Bram Moolenaar <Bram@vim.org>
date Sat, 15 Aug 2020 14:45:06 +0200
parents bd8327a0f315
children 5ab859e4430b
files src/evalvars.c src/testdir/test_vim9_script.vim src/version.c
diffstat 3 files changed, 14 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/evalvars.c
+++ b/src/evalvars.c
@@ -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;
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -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
--- a/src/version.c
+++ b/src/version.c
@@ -755,6 +755,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1459,
+/**/
     1458,
 /**/
     1457,