summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2021-06-26 13:28:35 +0200
committerBram Moolenaar <Bram@vim.org>2021-06-26 13:28:35 +0200
commit13e45d14ba7f590fb243c041bc45e6d4d47c8432 (patch)
tree6b877e3d3731885affc8b39f4fc1a58140cae745
parentce024c3e20839465dc8c8f79dcccc5414dd8c506 (diff)
patch 8.2.3053: Vim9: cannot assign to @@ in :def functionv8.2.3053
Problem: Vim9: cannot assign to @@ in :def function Solution: Handle '@' like '"'.
-rw-r--r--src/testdir/test_vim9_assign.vim25
-rw-r--r--src/version.c2
-rw-r--r--src/vim9compile.c3
3 files changed, 19 insertions, 11 deletions
diff --git a/src/testdir/test_vim9_assign.vim b/src/testdir/test_vim9_assign.vim
index cba79729c1..55b850a4b6 100644
--- a/src/testdir/test_vim9_assign.vim
+++ b/src/testdir/test_vim9_assign.vim
@@ -228,16 +228,6 @@ def Test_assignment()
CheckDefFailure(['$SOME_ENV_VAR += "more"'], 'E1051:')
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 ..= 'again'
assert_equal('noneagain', v:errmsg)
@@ -249,6 +239,21 @@ def Test_assignment()
END
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()
for name in ['true', 'false', 'null']
CheckDefExecAndScriptFailure(['var ' .. name .. ' = 0'], 'E1034:')
diff --git a/src/version.c b/src/version.c
index 2b320471b3..429fb69d58 100644
--- a/src/version.c
+++ b/src/version.c
@@ -756,6 +756,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 3053,
+/**/
3052,
/**/
3051,
diff --git a/src/vim9compile.c b/src/vim9compile.c
index bb5ea9726e..b8a879440d 100644
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -5854,7 +5854,8 @@ get_var_dest(
}
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]);
return FAIL;