# HG changeset patch # User Bram Moolenaar # Date 1592586903 -7200 # Node ID 187c3fb42c8f0b2a707b80b6c581b84464843b86 # Parent 5469fca04251d71dd8e5bc50f8b93b14a8d531eb patch 8.2.1012: Vim9: cannot declare single character script variables Commit: https://github.com/vim/vim/commit/3b74b6b4bb9a022f8c6f6e544360d628e10df1ab Author: Bram Moolenaar Date: Fri Jun 19 19:01:43 2020 +0200 patch 8.2.1012: Vim9: cannot declare single character script variables Problem: Vim9: cannot declare single character script variables. Solution: Don't see "b:", "s:", etc. as namespace. Fix item size of sn_var_vals. diff --git a/src/scriptfile.c b/src/scriptfile.c --- 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 --- 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 + 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 = [false, true, false] let list2: list = [1, 2, 3] diff --git a/src/version.c b/src/version.c --- 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 --- a/src/vim9script.c +++ b/src/vim9script.c @@ -471,7 +471,7 @@ vim9_declare_scriptvar(exarg_T *eap, cha } 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 != ':')