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

patch 8.2.3053: Vim9: cannot assign to @@ in :def function

Problem:    Vim9: cannot assign to @@ in :def function
Solution:   Handle '@' like '"'.
This commit is contained in:
Bram Moolenaar
2021-06-26 13:28:35 +02:00
parent ce024c3e20
commit 13e45d14ba
3 changed files with 19 additions and 11 deletions

View File

@@ -228,16 +228,6 @@ def Test_assignment()
CheckDefFailure(['$SOME_ENV_VAR += "more"'], 'E1051:') CheckDefFailure(['$SOME_ENV_VAR += "more"'], 'E1051:')
CheckDefFailure(['$SOME_ENV_VAR += 123'], 'E1012:') CheckDefFailure(['$SOME_ENV_VAR += 123'], 'E1012:')
lines =<< trim END
@c = 'areg'
@c ..= 'add'
assert_equal('aregadd', @c)
END
CheckDefAndScriptSuccess(lines)
CheckDefFailure(['@a += "more"'], 'E1051:')
CheckDefFailure(['@a += 123'], 'E1012:')
v:errmsg = 'none' v:errmsg = 'none'
v:errmsg ..= 'again' v:errmsg ..= 'again'
assert_equal('noneagain', v:errmsg) assert_equal('noneagain', v:errmsg)
@@ -249,6 +239,21 @@ def Test_assignment()
END END
enddef enddef
def Test_assign_register()
var lines =<< trim END
@c = 'areg'
@c ..= 'add'
assert_equal('aregadd', @c)
@@ = 'some text'
assert_equal('some text', getreg('"'))
END
CheckDefAndScriptSuccess(lines)
CheckDefFailure(['@a += "more"'], 'E1051:')
CheckDefFailure(['@a += 123'], 'E1012:')
enddef
def Test_reserved_name() def Test_reserved_name()
for name in ['true', 'false', 'null'] for name in ['true', 'false', 'null']
CheckDefExecAndScriptFailure(['var ' .. name .. ' = 0'], 'E1034:') CheckDefExecAndScriptFailure(['var ' .. name .. ' = 0'], 'E1034:')

View File

@@ -755,6 +755,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 */
/**/
3053,
/**/ /**/
3052, 3052,
/**/ /**/

View File

@@ -5854,7 +5854,8 @@ get_var_dest(
} }
else if (*name == '@') else if (*name == '@')
{ {
if (!valid_yank_reg(name[1], FALSE) || name[1] == '.') if (name[1] != '@'
&& (!valid_yank_reg(name[1], FALSE) || name[1] == '.'))
{ {
emsg_invreg(name[1]); emsg_invreg(name[1]);
return FAIL; return FAIL;