forked from aniani/vim
patch 8.2.4447: Vim9: can still use s:var in a compiled function
Problem: Vim9: can still use s:var in a compiled function. Solution: Disallow using s:var for Vim9 script. (closes #9824)
This commit is contained in:
@@ -220,7 +220,7 @@ def Test_assignment()
|
||||
enddef
|
||||
defcompile
|
||||
END
|
||||
v9.CheckScriptFailure(lines, 'E1089:')
|
||||
v9.CheckScriptFailure(lines, 'E1268:')
|
||||
|
||||
g:inc_counter += 1
|
||||
assert_equal(2, g:inc_counter)
|
||||
@@ -2460,6 +2460,49 @@ def Run_Test_declare_command_line()
|
||||
g:StopVimInTerminal(buf)
|
||||
enddef
|
||||
|
||||
def Test_using_s_var_in_function()
|
||||
var lines =<< trim END
|
||||
vim9script
|
||||
var scriptlevel = 123
|
||||
def SomeFunc()
|
||||
echo s:scriptlevel
|
||||
enddef
|
||||
SomeFunc()
|
||||
END
|
||||
v9.CheckScriptFailure(lines, 'E1268:')
|
||||
|
||||
# OK in legacy script
|
||||
lines =<< trim END
|
||||
let s:scriptlevel = 123
|
||||
def s:SomeFunc()
|
||||
echo s:scriptlevel
|
||||
enddef
|
||||
call s:SomeFunc()
|
||||
END
|
||||
v9.CheckScriptSuccess(lines)
|
||||
|
||||
lines =<< trim END
|
||||
vim9script
|
||||
var scriptlevel = 123
|
||||
def SomeFunc()
|
||||
s:scriptlevel = 456
|
||||
enddef
|
||||
SomeFunc()
|
||||
END
|
||||
v9.CheckScriptFailure(lines, 'E1268:')
|
||||
|
||||
# OK in legacy script
|
||||
lines =<< trim END
|
||||
let s:scriptlevel = 123
|
||||
def s:SomeFunc()
|
||||
s:scriptlevel = 456
|
||||
enddef
|
||||
call s:SomeFunc()
|
||||
call assert_equal(456, s:scriptlevel)
|
||||
END
|
||||
v9.CheckScriptSuccess(lines)
|
||||
enddef
|
||||
|
||||
|
||||
|
||||
" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker
|
||||
|
||||
@@ -750,6 +750,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
4447,
|
||||
/**/
|
||||
4446,
|
||||
/**/
|
||||
|
||||
@@ -1331,6 +1331,12 @@ compile_lhs(
|
||||
char_u *rawname = lhs->lhs_name
|
||||
+ (lhs->lhs_name[1] == ':' ? 2 : 0);
|
||||
|
||||
if (script_namespace && current_script_is_vim9())
|
||||
{
|
||||
semsg(_(e_cannot_use_s_colon_in_vim9_script_str),
|
||||
var_start);
|
||||
return FAIL;
|
||||
}
|
||||
if (is_decl)
|
||||
{
|
||||
if (script_namespace)
|
||||
|
||||
@@ -422,8 +422,15 @@ compile_load(
|
||||
{
|
||||
case 'v': res = generate_LOADV(cctx, name, error);
|
||||
break;
|
||||
case 's': if (is_expr && ASCII_ISUPPER(*name)
|
||||
&& find_func(name, FALSE) != NULL)
|
||||
case 's': if (current_script_is_vim9())
|
||||
{
|
||||
semsg(_(e_cannot_use_s_colon_in_vim9_script_str),
|
||||
*arg);
|
||||
vim_free(name);
|
||||
return FAIL;
|
||||
}
|
||||
if (is_expr && ASCII_ISUPPER(*name)
|
||||
&& find_func(name, FALSE) != NULL)
|
||||
res = generate_funcref(cctx, name, FALSE);
|
||||
else
|
||||
res = compile_load_scriptvar(cctx, name,
|
||||
|
||||
Reference in New Issue
Block a user