diff options
author | Bram Moolenaar <Bram@vim.org> | 2020-06-19 19:01:43 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2020-06-19 19:01:43 +0200 |
commit | 3b74b6b4bb9a022f8c6f6e544360d628e10df1ab (patch) | |
tree | 4c991455edb87799f3f8ea302886164c179f2fe8 | |
parent | c785b9a7f471f12825a1d6d2041c144c74242b7c (diff) | |
download | vim-git-3b74b6b4bb9a022f8c6f6e544360d628e10df1ab.tar.gz |
patch 8.2.1012: Vim9: cannot declare single character script variablesv8.2.1012
Problem: Vim9: cannot declare single character script variables.
Solution: Don't see "b:", "s:", etc. as namespace. Fix item size of
sn_var_vals.
-rw-r--r-- | src/scriptfile.c | 2 | ||||
-rw-r--r-- | src/testdir/test_vim9_script.vim | 35 | ||||
-rw-r--r-- | src/version.c | 2 | ||||
-rw-r--r-- | src/vim9script.c | 2 |
4 files changed, 39 insertions, 2 deletions
diff --git a/src/scriptfile.c b/src/scriptfile.c index 746a3d344..abfa3b588 100644 --- a/src/scriptfile.c +++ b/src/scriptfile.c @@ -1343,7 +1343,7 @@ do_source( // Allocate the local script variables to use for this script. new_script_vars(script_items.ga_len); - ga_init2(&si->sn_var_vals, sizeof(typval_T), 10); + ga_init2(&si->sn_var_vals, sizeof(svar_T), 10); ga_init2(&si->sn_imports, sizeof(imported_T), 10); ga_init2(&si->sn_type_list, sizeof(type_T), 10); # ifdef FEAT_PROFILE diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim index 3cfacbb84..d1587a206 100644 --- a/src/testdir/test_vim9_script.vim +++ b/src/testdir/test_vim9_script.vim @@ -109,6 +109,41 @@ def Test_assignment() call CheckDefFailure(['v:errmsg += 123'], 'E1013:') enddef +def Test_vim9_single_char_vars() + let lines =<< trim END + vim9script + + " single character variable declarations work + let a: string + let b: number + let l: list<any> + let s: string + let t: number + let v: number + let w: number + + " script-local variables can be used without s: prefix + a = 'script-a' + b = 111 + l = [1, 2, 3] + s = 'script-s' + t = 222 + v = 333 + w = 444 + + assert_equal('script-a', a) + assert_equal(111, b) + assert_equal([1, 2, 3], l) + assert_equal('script-s', s) + assert_equal(222, t) + assert_equal(333, v) + assert_equal(444, w) + END + writefile(lines, 'Xsinglechar') + source Xsinglechar + delete('Xsinglechar') +enddef + def Test_assignment_list() let list1: list<bool> = [false, true, false] let list2: list<number> = [1, 2, 3] diff --git a/src/version.c b/src/version.c index cc580fb85..9fc56709a 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 */ /**/ + 1012, +/**/ 1011, /**/ 1010, diff --git a/src/vim9script.c b/src/vim9script.c index 6c4cbc430..30c269af8 100644 --- a/src/vim9script.c +++ b/src/vim9script.c @@ -471,7 +471,7 @@ vim9_declare_scriptvar(exarg_T *eap, char_u *arg) } for (p = arg + 1; *p != NUL && eval_isnamec(*p); MB_PTR_ADV(p)) - if (*p == ':' && p != arg + 1) + if (*p == ':' && (VIM_ISWHITE(p[1]) || p != arg + 1)) break; if (*p != ':') |