From: Bram Moolenaar Date: Sun, 14 Jun 2020 10:50:24 +0000 (+0200) Subject: patch 8.2.0975: Vim9: script variable does not accept optional s: prefix X-Git-Tag: v8.2.0975 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=984dddbef421eda6b8ad60936f380c5f00aebb96;p=vim 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 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 @@ -754,6 +754,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 975, /**/ 974, /**/ 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