0
0
mirror of https://github.com/vim/vim.git synced 2025-09-24 03:44:06 -04:00

patch 8.2.2729: Vim9: wrong error message for referring to legacy script var

Problem:    Vim9: wrong error message for referring to legacy script variable.
Solution:   Do allow referring to a variable in legacy script without "s:" if
            it exists at compile time. (closes #8076)
This commit is contained in:
Bram Moolenaar
2021-04-06 21:17:27 +02:00
parent e3d1f4c982
commit 643ce6c0c6
3 changed files with 40 additions and 11 deletions

View File

@@ -1476,6 +1476,41 @@ def Test_var_declaration_fails()
CheckDefFailure(['const foo: number'], 'E1021:')
enddef
def Test_script_local_in_legacy()
# OK to define script-local later when prefixed with s:
var lines =<< trim END
def SetLater()
s:legacy = 'two'
enddef
defcompile
let s:legacy = 'one'
call SetLater()
call assert_equal('two', s:legacy)
END
CheckScriptSuccess(lines)
# OK to leave out s: prefix when script-local already defined
lines =<< trim END
let s:legacy = 'one'
def SetNoPrefix()
legacy = 'two'
enddef
call SetNoPrefix()
call assert_equal('two', s:legacy)
END
CheckScriptSuccess(lines)
# Not OK to leave out s: prefix when script-local defined later
lines =<< trim END
def SetLaterNoPrefix()
legacy = 'two'
enddef
defcompile
let s:legacy = 'one'
END
CheckScriptFailure(lines, 'E476:', 1)
enddef
def Test_var_type_check()
var lines =<< trim END
vim9script

View File

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

View File

@@ -5708,17 +5708,9 @@ generate_store_var(
return generate_STORE(cctx, ISN_STOREV, vimvaridx, NULL);
case dest_script:
if (scriptvar_idx < 0)
{
char_u *name_s = name;
int r;
// "s:" is included in the name.
r = generate_OLDSCRIPT(cctx, ISN_STORES, name_s,
// "s:" may be included in the name.
return generate_OLDSCRIPT(cctx, ISN_STORES, name,
scriptvar_sid, type);
if (name_s != name)
vim_free(name_s);
return r;
}
return generate_VIM9SCRIPT(cctx, ISN_STORESCRIPT,
scriptvar_sid, scriptvar_idx, type);
case dest_local:
@@ -5854,7 +5846,7 @@ compile_lhs(
? script_var_exists(var_start + 2, lhs->lhs_varlen - 2,
FALSE, cctx)
: script_var_exists(var_start, lhs->lhs_varlen,
TRUE, cctx)) == OK;
FALSE, cctx)) == OK;
imported_T *import =
find_imported(var_start, lhs->lhs_varlen, cctx);