forked from aniani/vim
patch 8.2.1028: Vim9: no error for declaring buffer, window, etc. variable
Problem: Vim9: no error for declaring buffer, window, etc. variable. Solution: Give an error. Unify the error messages.
This commit is contained in:
parent
820ffa567c
commit
e55b1c098d
@ -1204,6 +1204,13 @@ ex_let_one(
|
|||||||
emsg(_("E996: Cannot lock an environment variable"));
|
emsg(_("E996: Cannot lock an environment variable"));
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
if (current_sctx.sc_version == SCRIPT_VERSION_VIM9
|
||||||
|
&& (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;
|
||||||
name = arg;
|
name = arg;
|
||||||
@ -2864,16 +2871,17 @@ set_var_const(
|
|||||||
semsg(_(e_illvar), name);
|
semsg(_(e_illvar), name);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
is_script_local = ht == get_script_local_ht();
|
||||||
|
|
||||||
if (current_sctx.sc_version == SCRIPT_VERSION_VIM9
|
if (current_sctx.sc_version == SCRIPT_VERSION_VIM9
|
||||||
&& ht == &globvarht
|
&& !is_script_local
|
||||||
&& (flags & LET_NO_COMMAND) == 0)
|
&& (flags & LET_NO_COMMAND) == 0
|
||||||
|
&& name[1] == ':')
|
||||||
{
|
{
|
||||||
semsg(_(e_declare_global), name);
|
vim9_declare_error(name);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
is_script_local = ht == get_script_local_ht();
|
|
||||||
|
|
||||||
di = find_var_in_ht(ht, 0, varname, TRUE);
|
di = find_var_in_ht(ht, 0, varname, TRUE);
|
||||||
|
|
||||||
// Search in parent scope which is possible to reference from lambda
|
// Search in parent scope which is possible to reference from lambda
|
||||||
|
@ -1788,7 +1788,7 @@ EXTERN char e_no_white_before[] INIT(= N_("E1068: No white space allowed before
|
|||||||
EXTERN char e_lock_unlock[] INIT(= N_("E940: Cannot lock or unlock variable %s"));
|
EXTERN char e_lock_unlock[] INIT(= N_("E940: Cannot lock or unlock variable %s"));
|
||||||
EXTERN char e_const_req_value[] INIT(= N_("E1021: const requires a value"));
|
EXTERN char e_const_req_value[] INIT(= N_("E1021: const requires a value"));
|
||||||
EXTERN char e_type_req[] INIT(= N_("E1022: type or initialization required"));
|
EXTERN char e_type_req[] INIT(= N_("E1022: type or initialization required"));
|
||||||
EXTERN char e_declare_global[] INIT(= N_("E1016: Cannot declare a global variable: %s"));
|
EXTERN char e_declare_var[] INIT(= N_("E1016: Cannot declare a%s variable: %s"));
|
||||||
#endif
|
#endif
|
||||||
#if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
|
#if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
|
||||||
EXTERN char e_alloc_color[] INIT(= N_("E254: Cannot allocate color %s"));
|
EXTERN char e_alloc_color[] INIT(= N_("E254: Cannot allocate color %s"));
|
||||||
|
@ -10,6 +10,7 @@ int get_script_item_idx(int sid, char_u *name, int check_writable);
|
|||||||
imported_T *find_imported(char_u *name, size_t len, cctx_T *cctx);
|
imported_T *find_imported(char_u *name, size_t len, cctx_T *cctx);
|
||||||
char_u *to_name_const_end(char_u *arg);
|
char_u *to_name_const_end(char_u *arg);
|
||||||
int assignment_len(char_u *p, int *heredoc);
|
int assignment_len(char_u *p, int *heredoc);
|
||||||
|
void vim9_declare_error(char_u *name);
|
||||||
int check_vim9_unlet(char_u *name);
|
int check_vim9_unlet(char_u *name);
|
||||||
int compile_def_function(ufunc_T *ufunc, int set_return_type, cctx_T *outer_cctx);
|
int compile_def_function(ufunc_T *ufunc, int set_return_type, cctx_T *outer_cctx);
|
||||||
void set_function_type(ufunc_T *ufunc);
|
void set_function_type(ufunc_T *ufunc);
|
||||||
|
@ -1059,7 +1059,7 @@ func Test_expr_fails()
|
|||||||
call CheckDefFailure(["CallMe2('yes' , 'no')"], 'E1068:')
|
call CheckDefFailure(["CallMe2('yes' , 'no')"], 'E1068:')
|
||||||
|
|
||||||
call CheckDefFailure(["v:nosuch += 3"], 'E1001:')
|
call CheckDefFailure(["v:nosuch += 3"], 'E1001:')
|
||||||
call CheckDefFailure(["let v:statusmsg = ''"], 'E1064:')
|
call CheckDefFailure(["let v:statusmsg = ''"], 'E1016: Cannot declare a v: variable:')
|
||||||
call CheckDefFailure(["let asdf = v:nosuch"], 'E1001:')
|
call CheckDefFailure(["let asdf = v:nosuch"], 'E1001:')
|
||||||
|
|
||||||
call CheckDefFailure(["echo len('asdf'"], 'E110:')
|
call CheckDefFailure(["echo len('asdf'"], 'E110:')
|
||||||
|
@ -322,15 +322,15 @@ def Test_assignment_failure()
|
|||||||
call CheckDefFailure(['let &option'], 'E1052:')
|
call CheckDefFailure(['let &option'], 'E1052:')
|
||||||
call CheckDefFailure(['&g:option = 5'], 'E113:')
|
call CheckDefFailure(['&g:option = 5'], 'E113:')
|
||||||
|
|
||||||
call CheckDefFailure(['let $VAR = 5'], 'E1065:')
|
call CheckDefFailure(['let $VAR = 5'], 'E1016: Cannot declare an environment variable:')
|
||||||
|
|
||||||
call CheckDefFailure(['let @~ = 5'], 'E354:')
|
call CheckDefFailure(['let @~ = 5'], 'E354:')
|
||||||
call CheckDefFailure(['let @a = 5'], 'E1066:')
|
call CheckDefFailure(['let @a = 5'], 'E1066:')
|
||||||
|
|
||||||
call CheckDefFailure(['let g:var = 5'], 'E1016:')
|
call CheckDefFailure(['let g:var = 5'], 'E1016: Cannot declare a global variable:')
|
||||||
call CheckDefFailure(['let w:var = 5'], 'E1079:')
|
call CheckDefFailure(['let w:var = 5'], 'E1016: Cannot declare a window variable:')
|
||||||
call CheckDefFailure(['let b:var = 5'], 'E1078:')
|
call CheckDefFailure(['let b:var = 5'], 'E1016: Cannot declare a buffer variable:')
|
||||||
call CheckDefFailure(['let t:var = 5'], 'E1080:')
|
call CheckDefFailure(['let t:var = 5'], 'E1016: Cannot declare a tab variable:')
|
||||||
|
|
||||||
call CheckDefFailure(['let anr = 4', 'anr ..= "text"'], 'E1019:')
|
call CheckDefFailure(['let anr = 4', 'anr ..= "text"'], 'E1019:')
|
||||||
call CheckDefFailure(['let xnr += 4'], 'E1020:')
|
call CheckDefFailure(['let xnr += 4'], 'E1020:')
|
||||||
@ -1812,14 +1812,41 @@ def Test_vim9_comment_not_compiled()
|
|||||||
CheckScriptSuccess([
|
CheckScriptSuccess([
|
||||||
'vim9script',
|
'vim9script',
|
||||||
'g:var = 123',
|
'g:var = 123',
|
||||||
'let w:var = 777',
|
'b:var = 456',
|
||||||
|
'w:var = 777',
|
||||||
|
't:var = 888',
|
||||||
'unlet g:var w:var # something',
|
'unlet g:var w:var # something',
|
||||||
])
|
])
|
||||||
|
|
||||||
CheckScriptFailure([
|
CheckScriptFailure([
|
||||||
'vim9script',
|
'vim9script',
|
||||||
'let g:var = 123',
|
'let g:var = 123',
|
||||||
], 'E1016:')
|
], 'E1016: Cannot declare a global variable:')
|
||||||
|
|
||||||
|
CheckScriptFailure([
|
||||||
|
'vim9script',
|
||||||
|
'let b:var = 123',
|
||||||
|
], 'E1016: Cannot declare a buffer variable:')
|
||||||
|
|
||||||
|
CheckScriptFailure([
|
||||||
|
'vim9script',
|
||||||
|
'let w:var = 123',
|
||||||
|
], 'E1016: Cannot declare a window variable:')
|
||||||
|
|
||||||
|
CheckScriptFailure([
|
||||||
|
'vim9script',
|
||||||
|
'let t:var = 123',
|
||||||
|
], 'E1016: Cannot declare a tab variable:')
|
||||||
|
|
||||||
|
CheckScriptFailure([
|
||||||
|
'vim9script',
|
||||||
|
'let v:version = 123',
|
||||||
|
], 'E1016: Cannot declare a v: variable:')
|
||||||
|
|
||||||
|
CheckScriptFailure([
|
||||||
|
'vim9script',
|
||||||
|
'let $VARIABLE = "text"',
|
||||||
|
], 'E1016: Cannot declare an environment variable:')
|
||||||
|
|
||||||
CheckScriptFailure([
|
CheckScriptFailure([
|
||||||
'vim9script',
|
'vim9script',
|
||||||
|
@ -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 */
|
||||||
|
/**/
|
||||||
|
1028,
|
||||||
/**/
|
/**/
|
||||||
1027,
|
1027,
|
||||||
/**/
|
/**/
|
||||||
|
@ -4659,6 +4659,23 @@ generate_loadvar(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
vim9_declare_error(char_u *name)
|
||||||
|
{
|
||||||
|
char *scope = "";
|
||||||
|
|
||||||
|
switch (*name)
|
||||||
|
{
|
||||||
|
case 'g': scope = " global"; break;
|
||||||
|
case 'b': scope = " buffer"; break;
|
||||||
|
case 'w': scope = " window"; break;
|
||||||
|
case 't': scope = " tab"; break;
|
||||||
|
case 'v': scope = " v:"; break;
|
||||||
|
case '$': scope = "n environment"; break;
|
||||||
|
}
|
||||||
|
semsg(_(e_declare_var), scope, name);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Compile declaration and assignment:
|
* Compile declaration and assignment:
|
||||||
* "let var", "let var = expr", "const var = expr" and "var = expr"
|
* "let var", "let var = expr", "const var = expr" and "var = expr"
|
||||||
@ -4855,8 +4872,7 @@ compile_assignment(char_u *arg, exarg_T *eap, cmdidx_T cmdidx, cctx_T *cctx)
|
|||||||
type = &t_string;
|
type = &t_string;
|
||||||
if (is_decl)
|
if (is_decl)
|
||||||
{
|
{
|
||||||
semsg(_("E1065: Cannot declare an environment variable: %s"),
|
vim9_declare_error(name);
|
||||||
name);
|
|
||||||
goto theend;
|
goto theend;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -4880,7 +4896,7 @@ compile_assignment(char_u *arg, exarg_T *eap, cmdidx_T cmdidx, cctx_T *cctx)
|
|||||||
dest = dest_global;
|
dest = dest_global;
|
||||||
if (is_decl)
|
if (is_decl)
|
||||||
{
|
{
|
||||||
semsg(_(e_declare_global), name);
|
vim9_declare_error(name);
|
||||||
goto theend;
|
goto theend;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -4889,8 +4905,7 @@ compile_assignment(char_u *arg, exarg_T *eap, cmdidx_T cmdidx, cctx_T *cctx)
|
|||||||
dest = dest_buffer;
|
dest = dest_buffer;
|
||||||
if (is_decl)
|
if (is_decl)
|
||||||
{
|
{
|
||||||
semsg(_("E1078: Cannot declare a buffer variable: %s"),
|
vim9_declare_error(name);
|
||||||
name);
|
|
||||||
goto theend;
|
goto theend;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -4899,8 +4914,7 @@ compile_assignment(char_u *arg, exarg_T *eap, cmdidx_T cmdidx, cctx_T *cctx)
|
|||||||
dest = dest_window;
|
dest = dest_window;
|
||||||
if (is_decl)
|
if (is_decl)
|
||||||
{
|
{
|
||||||
semsg(_("E1079: Cannot declare a window variable: %s"),
|
vim9_declare_error(name);
|
||||||
name);
|
|
||||||
goto theend;
|
goto theend;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -4909,7 +4923,7 @@ compile_assignment(char_u *arg, exarg_T *eap, cmdidx_T cmdidx, cctx_T *cctx)
|
|||||||
dest = dest_tab;
|
dest = dest_tab;
|
||||||
if (is_decl)
|
if (is_decl)
|
||||||
{
|
{
|
||||||
semsg(_("E1080: Cannot declare a tab variable: %s"), name);
|
vim9_declare_error(name);
|
||||||
goto theend;
|
goto theend;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -4932,7 +4946,7 @@ compile_assignment(char_u *arg, exarg_T *eap, cmdidx_T cmdidx, cctx_T *cctx)
|
|||||||
type = typval2type(vtv);
|
type = typval2type(vtv);
|
||||||
if (is_decl)
|
if (is_decl)
|
||||||
{
|
{
|
||||||
semsg(_("E1064: Cannot declare a v: variable: %s"), name);
|
vim9_declare_error(name);
|
||||||
goto theend;
|
goto theend;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user