forked from aniani/vim
patch 8.2.1357: Vim9: cannot assign to / register
Problem: Vim9: cannot assign to / register. Solution: Adjust check for assignment.
This commit is contained in:
@@ -1439,6 +1439,13 @@ def Test_expr7_register()
|
|||||||
|
|
||||||
normal axyz
|
normal axyz
|
||||||
assert_equal("xyz", @.)
|
assert_equal("xyz", @.)
|
||||||
|
call CheckDefFailure(["@. = 'yes'"], 'E354:')
|
||||||
|
|
||||||
|
@/ = 'slash'
|
||||||
|
assert_equal('slash', @/)
|
||||||
|
|
||||||
|
@= = 'equal'
|
||||||
|
assert_equal('equal', @=)
|
||||||
enddef
|
enddef
|
||||||
|
|
||||||
def Test_expr7_namespace()
|
def Test_expr7_namespace()
|
||||||
|
@@ -470,8 +470,9 @@ def Test_assignment_failure()
|
|||||||
call CheckDefFailure(['let $VAR = 5'], 'E1016: Cannot declare an environment variable:')
|
call CheckDefFailure(['let $VAR = 5'], 'E1016: Cannot declare an environment variable:')
|
||||||
call CheckScriptFailure(['vim9script', 'let $ENV = "xxx"'], 'E1016:')
|
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 @a = 5'], 'E1066:')
|
||||||
|
call CheckDefFailure(['let @/ = "x"'], 'E1066:')
|
||||||
call CheckScriptFailure(['vim9script', 'let @a = "abc"'], 'E1066:')
|
call CheckScriptFailure(['vim9script', 'let @a = "abc"'], 'E1066:')
|
||||||
|
|
||||||
call CheckDefFailure(['let g:var = 5'], 'E1016: Cannot declare a global variable:')
|
call CheckDefFailure(['let g:var = 5'], 'E1016: Cannot declare a global variable:')
|
||||||
|
@@ -754,6 +754,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 */
|
||||||
|
/**/
|
||||||
|
1357,
|
||||||
/**/
|
/**/
|
||||||
1356,
|
1356,
|
||||||
/**/
|
/**/
|
||||||
|
@@ -5214,9 +5214,14 @@ compile_assignment(char_u *arg, exarg_T *eap, cmdidx_T cmdidx, cctx_T *cctx)
|
|||||||
int has_index = FALSE;
|
int has_index = FALSE;
|
||||||
int instr_count = -1;
|
int instr_count = -1;
|
||||||
|
|
||||||
p = (*var_start == '&' || *var_start == '$'
|
if (*var_start == '@')
|
||||||
|| *var_start == '@') ? var_start + 1 : var_start;
|
p = var_start + 2;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
p = (*var_start == '&' || *var_start == '$')
|
||||||
|
? var_start + 1 : var_start;
|
||||||
p = to_name_end(p, TRUE);
|
p = to_name_end(p, TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
// "a: type" is declaring variable "a" with a type, not "a:".
|
// "a: type" is declaring variable "a" with a type, not "a:".
|
||||||
if (is_decl && var_end == var_start + 2 && var_end[-1] == ':')
|
if (is_decl && var_end == var_start + 2 && var_end[-1] == ':')
|
||||||
@@ -5279,7 +5284,7 @@ compile_assignment(char_u *arg, exarg_T *eap, cmdidx_T cmdidx, cctx_T *cctx)
|
|||||||
}
|
}
|
||||||
else if (*var_start == '@')
|
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]);
|
emsg_invreg(var_start[1]);
|
||||||
goto theend;
|
goto theend;
|
||||||
@@ -7247,6 +7252,9 @@ compile_def_function(ufunc_T *ufunc, int set_return_type, cctx_T *outer_cctx)
|
|||||||
int oplen;
|
int oplen;
|
||||||
int heredoc;
|
int heredoc;
|
||||||
|
|
||||||
|
if (ea.cmd[0] == '@')
|
||||||
|
var_end = ea.cmd + 2;
|
||||||
|
else
|
||||||
var_end = find_name_end(pskip, NULL, NULL,
|
var_end = find_name_end(pskip, NULL, NULL,
|
||||||
FNE_CHECK_START | FNE_INCL_BR);
|
FNE_CHECK_START | FNE_INCL_BR);
|
||||||
oplen = assignment_len(skipwhite(var_end), &heredoc);
|
oplen = assignment_len(skipwhite(var_end), &heredoc);
|
||||||
|
Reference in New Issue
Block a user