Problem: Vim9: no error for declaring buffer, window, etc. variable.
Solution: Give an error. Unify the error messages.
emsg(_("E996: Cannot lock an environment variable"));
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.
++arg;
name = arg;
semsg(_(e_illvar), name);
return;
}
+ is_script_local = ht == get_script_local_ht();
+
if (current_sctx.sc_version == SCRIPT_VERSION_VIM9
- && ht == &globvarht
- && (flags & LET_NO_COMMAND) == 0)
+ && !is_script_local
+ && (flags & LET_NO_COMMAND) == 0
+ && name[1] == ':')
{
- semsg(_(e_declare_global), name);
+ vim9_declare_error(name);
return;
}
- is_script_local = ht == get_script_local_ht();
-
di = find_var_in_ht(ht, 0, varname, TRUE);
// Search in parent scope which is possible to reference from lambda
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_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
#if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
EXTERN char e_alloc_color[] INIT(= N_("E254: Cannot allocate color %s"));
imported_T *find_imported(char_u *name, size_t len, cctx_T *cctx);
char_u *to_name_const_end(char_u *arg);
int assignment_len(char_u *p, int *heredoc);
+void vim9_declare_error(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);
void set_function_type(ufunc_T *ufunc);
call CheckDefFailure(["CallMe2('yes' , 'no')"], 'E1068:')
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(["echo len('asdf'"], 'E110:')
call CheckDefFailure(['let &option'], 'E1052:')
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 @a = 5'], 'E1066:')
- call CheckDefFailure(['let g:var = 5'], 'E1016:')
- call CheckDefFailure(['let w:var = 5'], 'E1079:')
- call CheckDefFailure(['let b:var = 5'], 'E1078:')
- call CheckDefFailure(['let t:var = 5'], 'E1080:')
+ 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 b:var = 5'], 'E1016: Cannot declare a buffer variable:')
+ call CheckDefFailure(['let t:var = 5'], 'E1016: Cannot declare a tab variable:')
call CheckDefFailure(['let anr = 4', 'anr ..= "text"'], 'E1019:')
call CheckDefFailure(['let xnr += 4'], 'E1020:')
CheckScriptSuccess([
'vim9script',
'g:var = 123',
- 'let w:var = 777',
+ 'b:var = 456',
+ 'w:var = 777',
+ 't:var = 888',
'unlet g:var w:var # something',
])
CheckScriptFailure([
'vim9script',
'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([
'vim9script',
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 1028,
/**/
1027,
/**/
}
}
+ 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:
* "let var", "let var = expr", "const var = expr" and "var = expr"
type = &t_string;
if (is_decl)
{
- semsg(_("E1065: Cannot declare an environment variable: %s"),
- name);
+ vim9_declare_error(name);
goto theend;
}
}
dest = dest_global;
if (is_decl)
{
- semsg(_(e_declare_global), name);
+ vim9_declare_error(name);
goto theend;
}
}
dest = dest_buffer;
if (is_decl)
{
- semsg(_("E1078: Cannot declare a buffer variable: %s"),
- name);
+ vim9_declare_error(name);
goto theend;
}
}
dest = dest_window;
if (is_decl)
{
- semsg(_("E1079: Cannot declare a window variable: %s"),
- name);
+ vim9_declare_error(name);
goto theend;
}
}
dest = dest_tab;
if (is_decl)
{
- semsg(_("E1080: Cannot declare a tab variable: %s"), name);
+ vim9_declare_error(name);
goto theend;
}
}
type = typval2type(vtv);
if (is_decl)
{
- semsg(_("E1064: Cannot declare a v: variable: %s"), name);
+ vim9_declare_error(name);
goto theend;
}
}