forked from aniani/vim
patch 8.2.1355: Vim9: no error using :let for options and registers
Problem: Vim9: no error using :let for options and registers. Solution: Give an error. (closes #6568)
This commit is contained in:
parent
aa970abd0a
commit
c2ee44cc38
@ -1219,6 +1219,13 @@ ex_let_one(
|
|||||||
int opt_flags;
|
int opt_flags;
|
||||||
char_u *tofree = NULL;
|
char_u *tofree = NULL;
|
||||||
|
|
||||||
|
if (in_vim9script() && (flags & LET_NO_COMMAND) == 0
|
||||||
|
&& vim_strchr((char_u *)"$@&", *arg) != NULL)
|
||||||
|
{
|
||||||
|
vim9_declare_error(arg);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
// ":let $VAR = expr": Set environment variable.
|
// ":let $VAR = expr": Set environment variable.
|
||||||
if (*arg == '$')
|
if (*arg == '$')
|
||||||
{
|
{
|
||||||
@ -1227,11 +1234,6 @@ ex_let_one(
|
|||||||
emsg(_("E996: Cannot lock an environment variable"));
|
emsg(_("E996: Cannot lock an environment variable"));
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if (in_vim9script() && (flags & LET_NO_COMMAND) == 0)
|
|
||||||
{
|
|
||||||
vim9_declare_error(arg);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Find the end of the name.
|
// Find the end of the name.
|
||||||
++arg;
|
++arg;
|
||||||
|
@ -463,13 +463,16 @@ def Test_assignment_failure()
|
|||||||
'[x, y; z] = [1]'], 'E1093:')
|
'[x, y; z] = [1]'], 'E1093:')
|
||||||
|
|
||||||
call CheckDefFailure(['let somevar'], "E1022:")
|
call CheckDefFailure(['let somevar'], "E1022:")
|
||||||
call CheckDefFailure(['let &option'], 'E1052:')
|
call CheckDefFailure(['let &tabstop = 4'], 'E1052:')
|
||||||
call CheckDefFailure(['&g:option = 5'], 'E113:')
|
call CheckDefFailure(['&g:option = 5'], 'E113:')
|
||||||
|
call CheckScriptFailure(['vim9script', 'let &tabstop = 4'], 'E1052:')
|
||||||
|
|
||||||
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 CheckDefFailure(['let @~ = 5'], 'E354:')
|
call CheckDefFailure(['let @~ = 5'], 'E354:')
|
||||||
call CheckDefFailure(['let @a = 5'], 'E1066:')
|
call CheckDefFailure(['let @a = 5'], '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:')
|
||||||
call CheckDefFailure(['let w:var = 5'], 'E1016: Cannot declare a window variable:')
|
call CheckDefFailure(['let w:var = 5'], 'E1016: Cannot declare a window 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 */
|
||||||
|
/**/
|
||||||
|
1355,
|
||||||
/**/
|
/**/
|
||||||
1354,
|
1354,
|
||||||
/**/
|
/**/
|
||||||
|
@ -5067,7 +5067,12 @@ vim9_declare_error(char_u *name)
|
|||||||
case 'w': scope = _("window"); break;
|
case 'w': scope = _("window"); break;
|
||||||
case 't': scope = _("tab"); break;
|
case 't': scope = _("tab"); break;
|
||||||
case 'v': scope = "v:"; break;
|
case 'v': scope = "v:"; break;
|
||||||
case '$': semsg(_(e_declare_env_var), name); return;
|
case '$': semsg(_(e_declare_env_var), name);
|
||||||
|
return;
|
||||||
|
case '&': semsg(_("E1052: Cannot declare an option: %s"), name);
|
||||||
|
return;
|
||||||
|
case '@': semsg(_("E1066: Cannot declare a register: %s"), name);
|
||||||
|
return;
|
||||||
default: return;
|
default: return;
|
||||||
}
|
}
|
||||||
semsg(_(e_declare_var), scope, name);
|
semsg(_(e_declare_var), scope, name);
|
||||||
@ -5229,6 +5234,8 @@ compile_assignment(char_u *arg, exarg_T *eap, cmdidx_T cmdidx, cctx_T *cctx)
|
|||||||
|
|
||||||
if (cctx->ctx_skip != SKIP_YES)
|
if (cctx->ctx_skip != SKIP_YES)
|
||||||
{
|
{
|
||||||
|
int declare_error = FALSE;
|
||||||
|
|
||||||
if (*var_start == '&')
|
if (*var_start == '&')
|
||||||
{
|
{
|
||||||
int cc;
|
int cc;
|
||||||
@ -5240,11 +5247,7 @@ compile_assignment(char_u *arg, exarg_T *eap, cmdidx_T cmdidx, cctx_T *cctx)
|
|||||||
emsg(_(e_const_option));
|
emsg(_(e_const_option));
|
||||||
goto theend;
|
goto theend;
|
||||||
}
|
}
|
||||||
if (is_decl)
|
declare_error = is_decl;
|
||||||
{
|
|
||||||
semsg(_("E1052: Cannot declare an option: %s"), var_start);
|
|
||||||
goto theend;
|
|
||||||
}
|
|
||||||
p = var_start;
|
p = var_start;
|
||||||
p = find_option_end(&p, &opt_flags);
|
p = find_option_end(&p, &opt_flags);
|
||||||
if (p == NULL)
|
if (p == NULL)
|
||||||
@ -5272,11 +5275,7 @@ compile_assignment(char_u *arg, exarg_T *eap, cmdidx_T cmdidx, cctx_T *cctx)
|
|||||||
{
|
{
|
||||||
dest = dest_env;
|
dest = dest_env;
|
||||||
type = &t_string;
|
type = &t_string;
|
||||||
if (is_decl)
|
declare_error = is_decl;
|
||||||
{
|
|
||||||
vim9_declare_error(name);
|
|
||||||
goto theend;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (*var_start == '@')
|
else if (*var_start == '@')
|
||||||
{
|
{
|
||||||
@ -5287,47 +5286,27 @@ compile_assignment(char_u *arg, exarg_T *eap, cmdidx_T cmdidx, cctx_T *cctx)
|
|||||||
}
|
}
|
||||||
dest = dest_reg;
|
dest = dest_reg;
|
||||||
type = &t_string;
|
type = &t_string;
|
||||||
if (is_decl)
|
declare_error = is_decl;
|
||||||
{
|
|
||||||
semsg(_("E1066: Cannot declare a register: %s"), name);
|
|
||||||
goto theend;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (varlen > 1 && STRNCMP(var_start, "g:", 2) == 0)
|
else if (varlen > 1 && STRNCMP(var_start, "g:", 2) == 0)
|
||||||
{
|
{
|
||||||
dest = dest_global;
|
dest = dest_global;
|
||||||
if (is_decl)
|
declare_error = is_decl;
|
||||||
{
|
|
||||||
vim9_declare_error(name);
|
|
||||||
goto theend;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (varlen > 1 && STRNCMP(var_start, "b:", 2) == 0)
|
else if (varlen > 1 && STRNCMP(var_start, "b:", 2) == 0)
|
||||||
{
|
{
|
||||||
dest = dest_buffer;
|
dest = dest_buffer;
|
||||||
if (is_decl)
|
declare_error = is_decl;
|
||||||
{
|
|
||||||
vim9_declare_error(name);
|
|
||||||
goto theend;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (varlen > 1 && STRNCMP(var_start, "w:", 2) == 0)
|
else if (varlen > 1 && STRNCMP(var_start, "w:", 2) == 0)
|
||||||
{
|
{
|
||||||
dest = dest_window;
|
dest = dest_window;
|
||||||
if (is_decl)
|
declare_error = is_decl;
|
||||||
{
|
|
||||||
vim9_declare_error(name);
|
|
||||||
goto theend;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (varlen > 1 && STRNCMP(var_start, "t:", 2) == 0)
|
else if (varlen > 1 && STRNCMP(var_start, "t:", 2) == 0)
|
||||||
{
|
{
|
||||||
dest = dest_tab;
|
dest = dest_tab;
|
||||||
if (is_decl)
|
declare_error = is_decl;
|
||||||
{
|
|
||||||
vim9_declare_error(name);
|
|
||||||
goto theend;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (varlen > 1 && STRNCMP(var_start, "v:", 2) == 0)
|
else if (varlen > 1 && STRNCMP(var_start, "v:", 2) == 0)
|
||||||
{
|
{
|
||||||
@ -5346,11 +5325,7 @@ compile_assignment(char_u *arg, exarg_T *eap, cmdidx_T cmdidx, cctx_T *cctx)
|
|||||||
dest = dest_vimvar;
|
dest = dest_vimvar;
|
||||||
vtv = get_vim_var_tv(vimvaridx);
|
vtv = get_vim_var_tv(vimvaridx);
|
||||||
type = typval2type_vimvar(vtv, cctx->ctx_type_list);
|
type = typval2type_vimvar(vtv, cctx->ctx_type_list);
|
||||||
if (is_decl)
|
declare_error = is_decl;
|
||||||
{
|
|
||||||
vim9_declare_error(name);
|
|
||||||
goto theend;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -5439,6 +5414,12 @@ compile_assignment(char_u *arg, exarg_T *eap, cmdidx_T cmdidx, cctx_T *cctx)
|
|||||||
goto theend;
|
goto theend;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (declare_error)
|
||||||
|
{
|
||||||
|
vim9_declare_error(name);
|
||||||
|
goto theend;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// handle "a:name" as a name, not index "name" on "a"
|
// handle "a:name" as a name, not index "name" on "a"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user