Mercurial > vim
changeset 21614:d0128ecd4341 v8.2.1357
patch 8.2.1357: Vim9: cannot assign to / register
Commit: https://github.com/vim/vim/commit/658217276fccb5e53cdf4ba0f023bca80e0a8fed
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Aug 2 18:58:54 2020 +0200
patch 8.2.1357: Vim9: cannot assign to / register
Problem: Vim9: cannot assign to / register.
Solution: Adjust check for assignment.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 02 Aug 2020 19:00:03 +0200 |
parents | 9dade08b2bad |
children | 38f947771cdf |
files | src/testdir/test_vim9_expr.vim src/testdir/test_vim9_script.vim src/version.c src/vim9compile.c |
diffstat | 4 files changed, 24 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/testdir/test_vim9_expr.vim +++ b/src/testdir/test_vim9_expr.vim @@ -1439,6 +1439,13 @@ def Test_expr7_register() normal axyz assert_equal("xyz", @.) + call CheckDefFailure(["@. = 'yes'"], 'E354:') + + @/ = 'slash' + assert_equal('slash', @/) + + @= = 'equal' + assert_equal('equal', @=) enddef def Test_expr7_namespace()
--- a/src/testdir/test_vim9_script.vim +++ b/src/testdir/test_vim9_script.vim @@ -470,8 +470,9 @@ def Test_assignment_failure() call CheckDefFailure(['let $VAR = 5'], 'E1016: Cannot declare an environment variable:') call CheckScriptFailure(['vim9script', 'let $ENV = "xxx"'], 'E1016:') - call CheckDefFailure(['let @~ = 5'], 'E354:') + call CheckDefFailure(['let @~ = 5'], 'E1066:') call CheckDefFailure(['let @a = 5'], 'E1066:') + call CheckDefFailure(['let @/ = "x"'], 'E1066:') call CheckScriptFailure(['vim9script', 'let @a = "abc"'], 'E1066:') call CheckDefFailure(['let g:var = 5'], 'E1016: Cannot declare a global variable:')
--- a/src/version.c +++ b/src/version.c @@ -755,6 +755,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1357, +/**/ 1356, /**/ 1355,
--- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -5214,9 +5214,14 @@ compile_assignment(char_u *arg, exarg_T int has_index = FALSE; int instr_count = -1; - p = (*var_start == '&' || *var_start == '$' - || *var_start == '@') ? var_start + 1 : var_start; - p = to_name_end(p, TRUE); + if (*var_start == '@') + p = var_start + 2; + else + { + p = (*var_start == '&' || *var_start == '$') + ? var_start + 1 : var_start; + p = to_name_end(p, TRUE); + } // "a: type" is declaring variable "a" with a type, not "a:". if (is_decl && var_end == var_start + 2 && var_end[-1] == ':') @@ -5279,7 +5284,7 @@ compile_assignment(char_u *arg, exarg_T } else if (*var_start == '@') { - if (!valid_yank_reg(var_start[1], TRUE)) + if (!valid_yank_reg(var_start[1], FALSE) || var_start[1] == '.') { emsg_invreg(var_start[1]); goto theend; @@ -7247,7 +7252,10 @@ compile_def_function(ufunc_T *ufunc, int int oplen; int heredoc; - var_end = find_name_end(pskip, NULL, NULL, + if (ea.cmd[0] == '@') + var_end = ea.cmd + 2; + else + var_end = find_name_end(pskip, NULL, NULL, FNE_CHECK_START | FNE_INCL_BR); oplen = assignment_len(skipwhite(var_end), &heredoc); if (oplen > 0)