From: Bram Moolenaar Date: Wed, 2 Jun 2021 09:49:23 +0000 (+0200) Subject: patch 8.2.2921: E704 for script local variable is not backwards compatible X-Git-Tag: v8.2.2921 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b54abeeafb074248597878a874fed9a66b114c06;p=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. --- diff --git a/src/dict.c b/src/dict.c index 876eeea49..f0f045b27 100644 --- a/src/dict.c +++ b/src/dict.c @@ -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) { return (d == get_globvar_dict() - || (SCRIPT_ID_VALID(current_sctx.sc_sid) - && d == &SCRIPT_ITEM(current_sctx.sc_sid)->sn_vars->sv_dict)) + || (in_vim9script() && SCRIPT_ID_VALID(current_sctx.sc_sid) + && 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) && var_wrong_func_name(name, TRUE); } diff --git a/src/testdir/test_functions.vim b/src/testdir/test_functions.vim index f945e9064..bc9649172 100644 --- a/src/testdir/test_functions.vim +++ b/src/testdir/test_functions.vim @@ -4,6 +4,7 @@ source shared.vim source check.vim source term_util.vim source screendump.vim +source vim9.vim " Must be done first, since the alternate buffer must be unset. func Test_00_bufexists() @@ -2684,8 +2685,13 @@ endfunc 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 s:["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 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:') let g:bar = 123 diff --git a/src/version.c b/src/version.c index 1c01adb22..321047f56 100644 --- a/src/version.c +++ b/src/version.c @@ -750,6 +750,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 2921, /**/ 2920, /**/