# HG changeset patch # User Bram Moolenaar # Date 1592132404 -7200 # Node ID 709379ab51100938f19c27ac6e3139f7a32424a6 # Parent 67df55152c3389e0218137d8a420a30032bc5ab0 patch 8.2.0975: Vim9: script variable does not accept optional s: prefix Commit: https://github.com/vim/vim/commit/984dddbef421eda6b8ad60936f380c5f00aebb96 Author: Bram Moolenaar Date: Sun Jun 14 12:50:24 2020 +0200 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 --- 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 --- 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 --- a/src/vim9script.c +++ b/src/vim9script.c @@ -462,15 +462,20 @@ vim9_declare_scriptvar(exarg_T *eap, cha 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