summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-06-14 12:50:24 +0200
committerBram Moolenaar <Bram@vim.org>2020-06-14 12:50:24 +0200
commit984dddbef421eda6b8ad60936f380c5f00aebb96 (patch)
tree26184f9ac68dd1a207f7a333ac100da3142fe44e
parentf3decc5830ef8d8d94902b76114935283dd4142e (diff)
downloadvim-git-984dddbef421eda6b8ad60936f380c5f00aebb96.tar.gz
patch 8.2.0975: Vim9: script variable does not accept optional s: prefixv8.2.0975
Problem: Vim9: script variable does not accept optional s: prefix. Solution: Adjust the accepted syntax.
-rw-r--r--src/testdir/test_vim9_script.vim17
-rw-r--r--src/version.c2
-rw-r--r--src/vim9script.c11
3 files changed, 27 insertions, 3 deletions
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index 2fea0de92..58b2ba255 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -1822,13 +1822,24 @@ def Test_let_declaration()
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 @@ def Test_let_type_check()
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 1f9190328..e9a0723bd 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 */
/**/
+ 975,
+/**/
974,
/**/
973,
diff --git a/src/vim9script.c b/src/vim9script.c
index 650168419..cdbcb47e7 100644
--- a/src/vim9script.c
+++ b/src/vim9script.c
@@ -462,15 +462,20 @@ vim9_declare_scriptvar(exarg_T *eap, char_u *arg)
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