summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-08-15 14:31:20 +0200
committerBram Moolenaar <Bram@vim.org>2020-08-15 14:31:20 +0200
commit53b29e4845857d76ca7df1ff2fd0e03c3eeb82e1 (patch)
tree6b89dae5074bf8892cde67ba75b7dda045364bf4
parent9a5c553f790f74e4c36295ce5d46c1aa7d13eae6 (diff)
patch 8.2.1459: Vim9: declaring script var in script does not infer the typev8.2.1459
Problem: Vim9: declaring ascript variable at the script level does not infer the type. Solution: Get the type from the value. (closes #6716)
-rw-r--r--src/evalvars.c5
-rw-r--r--src/testdir/test_vim9_script.vim8
-rw-r--r--src/version.c2
3 files changed, 14 insertions, 1 deletions
diff --git a/src/evalvars.c b/src/evalvars.c
index 43c05fdf87..d948ddec51 100644
--- 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;
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index 163b9480f0..d8e20e12f9 100644
--- 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
diff --git a/src/version.c b/src/version.c
index b389ee560a..4889fcdf8b 100644
--- 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,