forked from aniani/vim
patch 8.2.2921: E704 for script local variable is not backwards compatible
Problem: E704 for script local variable is not backwards compatible. (Yasuhiro Matsumoto) Solution: Only give the error in Vim9 script. Also check for function-local variable.
This commit is contained in:
@@ -352,8 +352,9 @@ dict_copy(dict_T *orig, int deep, int copyID)
|
|||||||
dict_wrong_func_name(dict_T *d, typval_T *tv, char_u *name)
|
dict_wrong_func_name(dict_T *d, typval_T *tv, char_u *name)
|
||||||
{
|
{
|
||||||
return (d == get_globvar_dict()
|
return (d == get_globvar_dict()
|
||||||
|| (SCRIPT_ID_VALID(current_sctx.sc_sid)
|
|| (in_vim9script() && SCRIPT_ID_VALID(current_sctx.sc_sid)
|
||||||
&& d == &SCRIPT_ITEM(current_sctx.sc_sid)->sn_vars->sv_dict))
|
&& d == &SCRIPT_ITEM(current_sctx.sc_sid)->sn_vars->sv_dict)
|
||||||
|
|| &d->dv_hashtab == get_funccal_local_ht())
|
||||||
&& (tv->v_type == VAR_FUNC || tv->v_type == VAR_PARTIAL)
|
&& (tv->v_type == VAR_FUNC || tv->v_type == VAR_PARTIAL)
|
||||||
&& var_wrong_func_name(name, TRUE);
|
&& var_wrong_func_name(name, TRUE);
|
||||||
}
|
}
|
||||||
|
@@ -4,6 +4,7 @@ source shared.vim
|
|||||||
source check.vim
|
source check.vim
|
||||||
source term_util.vim
|
source term_util.vim
|
||||||
source screendump.vim
|
source screendump.vim
|
||||||
|
source vim9.vim
|
||||||
|
|
||||||
" Must be done first, since the alternate buffer must be unset.
|
" Must be done first, since the alternate buffer must be unset.
|
||||||
func Test_00_bufexists()
|
func Test_00_bufexists()
|
||||||
@@ -2684,8 +2685,13 @@ endfunc
|
|||||||
func Test_builtin_check()
|
func Test_builtin_check()
|
||||||
call assert_fails('let g:["trim"] = {x -> " " .. x}', 'E704:')
|
call assert_fails('let g:["trim"] = {x -> " " .. x}', 'E704:')
|
||||||
call assert_fails('let g:.trim = {x -> " " .. x}', 'E704:')
|
call assert_fails('let g:.trim = {x -> " " .. x}', 'E704:')
|
||||||
call assert_fails('let s:["trim"] = {x -> " " .. x}', 'E704:')
|
call assert_fails('let l:["trim"] = {x -> " " .. x}', 'E704:')
|
||||||
call assert_fails('let s:.trim = {x -> " " .. x}', 'E704:')
|
call assert_fails('let l:.trim = {x -> " " .. x}', 'E704:')
|
||||||
|
let lines =<< trim END
|
||||||
|
vim9script
|
||||||
|
var s:trim = (x) => " " .. x
|
||||||
|
END
|
||||||
|
call CheckScriptFailure(lines, 'E704:')
|
||||||
|
|
||||||
call assert_fails('call extend(g:, #{foo: { -> "foo" }})', 'E704:')
|
call assert_fails('call extend(g:, #{foo: { -> "foo" }})', 'E704:')
|
||||||
let g:bar = 123
|
let g:bar = 123
|
||||||
|
@@ -750,6 +750,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 */
|
||||||
|
/**/
|
||||||
|
2921,
|
||||||
/**/
|
/**/
|
||||||
2920,
|
2920,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user