diff options
author | Bram Moolenaar <Bram@vim.org> | 2020-08-15 14:31:20 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2020-08-15 14:31:20 +0200 |
commit | 53b29e4845857d76ca7df1ff2fd0e03c3eeb82e1 (patch) | |
tree | 6b89dae5074bf8892cde67ba75b7dda045364bf4 | |
parent | 9a5c553f790f74e4c36295ce5d46c1aa7d13eae6 (diff) | |
download | vim-git-53b29e4845857d76ca7df1ff2fd0e03c3eeb82e1.tar.gz |
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.c | 5 | ||||
-rw-r--r-- | src/testdir/test_vim9_script.vim | 8 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 14 insertions, 1 deletions
diff --git a/src/evalvars.c b/src/evalvars.c index 43c05fdf8..d948ddec5 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 163b9480f..d8e20e12f 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 b389ee560..4889fcdf8 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, |