patch 8.2.0975: Vim9: script variable does not accept optional s: prefix
Problem: Vim9: script variable does not accept optional s: prefix.
Solution: Adjust the accepted syntax.
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index 2fea0de..58b2ba2 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -1822,13 +1822,24 @@
g:var_uninit = var
var = 'text'
g:var_test = var
+ " prefixing s: is optional
+ s:var = 'prefixed'
+ g:var_prefixed = s:var
+
+ let s:other: number
+ other = 1234
+ g:other_var = other
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)
unlet g:var_uninit
unlet g:var_test
+ unlet g:var_prefixed
+ unlet g:other_var
enddef
def Test_let_type_check()
@@ -1838,6 +1849,12 @@
var = 1234
END
CheckScriptFailure(lines, 'E1013:')
+
+ lines =<< trim END
+ vim9script
+ let var:string
+ END
+ CheckScriptFailure(lines, 'E1069:')
enddef
def Test_forward_declaration()
diff --git a/src/version.c b/src/version.c
index 1f91903..e9a0723 100644
--- a/src/version.c
+++ b/src/version.c
@@ -755,6 +755,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 975,
+/**/
974,
/**/
973,
diff --git a/src/vim9script.c b/src/vim9script.c
index 6501684..cdbcb47 100644
--- a/src/vim9script.c
+++ b/src/vim9script.c
@@ -462,15 +462,20 @@
return arg + STRLEN(arg);
}
- for (p = arg + 1; *p != NUL && *p != ':' && eval_isnamec(*p);
- MB_PTR_ADV(p))
- ;
+ for (p = arg + 1; *p != NUL && eval_isnamec(*p); MB_PTR_ADV(p))
+ if (*p == ':' && p != arg + 1)
+ break;
if (*p != ':')
{
emsg(_(e_type_req));
return arg + STRLEN(arg);
}
+ if (!VIM_ISWHITE(p[1]))
+ {
+ semsg(_(e_white_after), ":");
+ return arg + STRLEN(arg);
+ }
name = vim_strnsave(arg, p - arg);
// parse type