summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-06-19 19:01:43 +0200
committerBram Moolenaar <Bram@vim.org>2020-06-19 19:01:43 +0200
commit3b74b6b4bb9a022f8c6f6e544360d628e10df1ab (patch)
tree4c991455edb87799f3f8ea302886164c179f2fe8
parentc785b9a7f471f12825a1d6d2041c144c74242b7c (diff)
downloadvim-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.c2
-rw-r--r--src/testdir/test_vim9_script.vim35
-rw-r--r--src/version.c2
-rw-r--r--src/vim9script.c2
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 != ':')