0
0
mirror of https://github.com/vim/vim.git synced 2025-09-29 04:34:16 -04:00

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.
This commit is contained in:
Bram Moolenaar
2020-06-14 12:50:24 +02:00
parent f3decc5830
commit 984dddbef4
3 changed files with 27 additions and 3 deletions

View File

@@ -1822,13 +1822,24 @@ def Test_let_declaration()
g:var_uninit = var g:var_uninit = var
var = 'text' var = 'text'
g:var_test = var 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 END
CheckScriptSuccess(lines) CheckScriptSuccess(lines)
assert_equal('', g:var_uninit) assert_equal('', g:var_uninit)
assert_equal('text', g:var_test) 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_uninit
unlet g:var_test unlet g:var_test
unlet g:var_prefixed
unlet g:other_var
enddef enddef
def Test_let_type_check() def Test_let_type_check()
@@ -1838,6 +1849,12 @@ def Test_let_type_check()
var = 1234 var = 1234
END END
CheckScriptFailure(lines, 'E1013:') CheckScriptFailure(lines, 'E1013:')
lines =<< trim END
vim9script
let var:string
END
CheckScriptFailure(lines, 'E1069:')
enddef enddef
def Test_forward_declaration() def Test_forward_declaration()

View File

@@ -754,6 +754,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
975,
/**/ /**/
974, 974,
/**/ /**/

View File

@@ -462,15 +462,20 @@ vim9_declare_scriptvar(exarg_T *eap, char_u *arg)
return arg + STRLEN(arg); return arg + STRLEN(arg);
} }
for (p = arg + 1; *p != NUL && *p != ':' && eval_isnamec(*p); for (p = arg + 1; *p != NUL && eval_isnamec(*p); MB_PTR_ADV(p))
MB_PTR_ADV(p)) if (*p == ':' && p != arg + 1)
; break;
if (*p != ':') if (*p != ':')
{ {
emsg(_(e_type_req)); emsg(_(e_type_req));
return arg + STRLEN(arg); return arg + STRLEN(arg);
} }
if (!VIM_ISWHITE(p[1]))
{
semsg(_(e_white_after), ":");
return arg + STRLEN(arg);
}
name = vim_strnsave(arg, p - arg); name = vim_strnsave(arg, p - arg);
// parse type // parse type