Patch 8.2.1028
Problem: Vim9: no error for declaring buffer, window, etc. variable.
Solution: Give an error. Unify the error messages.
Files: src/evalvars.c, src/globals.h, src/vim9compile.c,
src/proto/vim9compile.pro, src/testdir/test_vim9_expr.vim,
src/testdir/test_vim9_script.vim
*** ../vim-8.2.1027/src/evalvars.c 2020-06-20 22:50:44.171608245 +0200
--- src/evalvars.c 2020-06-21 15:50:21.598728537 +0200
***************
*** 1204,1209 ****
--- 1204,1216 ----
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;
***************
*** 2864,2879 ****
semsg(_(e_illvar), name);
return;
}
if (current_sctx.sc_version == SCRIPT_VERSION_VIM9
! && ht == &globvarht
! && (flags & LET_NO_COMMAND) == 0)
{
! semsg(_(e_declare_global), 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
--- 2871,2887 ----
semsg(_(e_illvar), name);
return;
}
+ is_script_local = ht == get_script_local_ht();
+
if (current_sctx.sc_version == SCRIPT_VERSION_VIM9
! && !is_script_local
! && (flags & LET_NO_COMMAND) == 0
! && name[1] == ':')
{
! vim9_declare_error(name);
return;
}
di = find_var_in_ht(ht, 0, varname, TRUE);
// Search in parent scope which is possible to reference from lambda
*** ../vim-8.2.1027/src/globals.h 2020-06-20 22:50:44.171608245 +0200
--- src/globals.h 2020-06-21 15:42:22.731231050 +0200
***************
*** 1788,1794 ****
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"));
#endif
#if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
EXTERN char e_alloc_color[] INIT(= N_("E254: Cannot allocate color %s"));
--- 1788,1794 ----
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_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"));
*** ../vim-8.2.1027/src/vim9compile.c 2020-06-21 14:12:14.014668156 +0200
--- src/vim9compile.c 2020-06-21 15:42:15.039254482 +0200
***************
*** 4659,4664 ****
--- 4659,4681 ----
}
}
+ 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"
***************
*** 4855,4862 ****
type = &t_string;
if (is_decl)
{
! semsg(_("E1065: Cannot declare an environment variable:
%s"),
! name);
goto theend;
}
}
--- 4872,4878 ----
type = &t_string;
if (is_decl)
{
! vim9_declare_error(name);
goto theend;
}
}
***************
*** 4880,4886 ****
dest = dest_global;
if (is_decl)
{
! semsg(_(e_declare_global), name);
goto theend;
}
}
--- 4896,4902 ----
dest = dest_global;
if (is_decl)
{
! vim9_declare_error(name);
goto theend;
}
}
***************
*** 4889,4896 ****
dest = dest_buffer;
if (is_decl)
{
! semsg(_("E1078: Cannot declare a buffer variable: %s"),
! name);
goto theend;
}
}
--- 4905,4911 ----
dest = dest_buffer;
if (is_decl)
{
! vim9_declare_error(name);
goto theend;
}
}
***************
*** 4899,4906 ****
dest = dest_window;
if (is_decl)
{
! semsg(_("E1079: Cannot declare a window variable: %s"),
! name);
goto theend;
}
}
--- 4914,4920 ----
dest = dest_window;
if (is_decl)
{
! vim9_declare_error(name);
goto theend;
}
}
***************
*** 4909,4915 ****
dest = dest_tab;
if (is_decl)
{
! semsg(_("E1080: Cannot declare a tab variable: %s"), name);
goto theend;
}
}
--- 4923,4929 ----
dest = dest_tab;
if (is_decl)
{
! vim9_declare_error(name);
goto theend;
}
}
***************
*** 4932,4938 ****
type = typval2type(vtv);
if (is_decl)
{
! semsg(_("E1064: Cannot declare a v: variable: %s"), name);
goto theend;
}
}
--- 4946,4952 ----
type = typval2type(vtv);
if (is_decl)
{
! vim9_declare_error(name);
goto theend;
}
}
*** ../vim-8.2.1027/src/proto/vim9compile.pro 2020-06-20 18:19:05.916877882
+0200
--- src/proto/vim9compile.pro 2020-06-21 15:34:13.916728111 +0200
***************
*** 10,15 ****
--- 10,16 ----
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);
*** ../vim-8.2.1027/src/testdir/test_vim9_expr.vim 2020-06-21
14:12:14.014668156 +0200
--- src/testdir/test_vim9_expr.vim 2020-06-21 15:35:32.996484421 +0200
***************
*** 1059,1065 ****
call CheckDefFailure(["CallMe2('yes' , 'no')"], 'E1068:')
call CheckDefFailure(["v:nosuch += 3"], 'E1001:')
! call CheckDefFailure(["let v:statusmsg = ''"], 'E1064:')
call CheckDefFailure(["let asdf = v:nosuch"], 'E1001:')
call CheckDefFailure(["echo len('asdf'"], 'E110:')
--- 1059,1065 ----
call CheckDefFailure(["CallMe2('yes' , 'no')"], 'E1068:')
call CheckDefFailure(["v:nosuch += 3"], 'E1001:')
! call CheckDefFailure(["let v:statusmsg = ''"], 'E1016: Cannot declare a v:
variable:')
call CheckDefFailure(["let asdf = v:nosuch"], 'E1001:')
call CheckDefFailure(["echo len('asdf'"], 'E110:')
*** ../vim-8.2.1027/src/testdir/test_vim9_script.vim 2020-06-20
22:50:44.175608236 +0200
--- src/testdir/test_vim9_script.vim 2020-06-21 15:47:41.142964476 +0200
***************
*** 322,336 ****
call CheckDefFailure(['let &option'], 'E1052:')
call CheckDefFailure(['&g:option = 5'], 'E113:')
! call CheckDefFailure(['let $VAR = 5'], 'E1065:')
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 anr = 4', 'anr ..= "text"'], 'E1019:')
call CheckDefFailure(['let xnr += 4'], 'E1020:')
--- 322,336 ----
call CheckDefFailure(['let &option'], 'E1052:')
call CheckDefFailure(['&g:option = 5'], 'E113:')
! 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: 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:')
***************
*** 1812,1825 ****
CheckScriptSuccess([
'vim9script',
'g:var = 123',
! 'let w:var = 777',
'unlet g:var w:var # something',
])
CheckScriptFailure([
'vim9script',
'let g:var = 123',
! ], 'E1016:')
CheckScriptFailure([
'vim9script',
--- 1812,1852 ----
CheckScriptSuccess([
'vim9script',
'g:var = 123',
! 'b:var = 456',
! 'w:var = 777',
! 't:var = 888',
'unlet g:var w:var # something',
])
CheckScriptFailure([
'vim9script',
'let g:var = 123',
! ], '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',
*** ../vim-8.2.1027/src/version.c 2020-06-21 15:09:10.665865729 +0200
--- src/version.c 2020-06-21 15:50:40.726696578 +0200
***************
*** 756,757 ****
--- 756,759 ----
{ /* Add new patch number below this line */
+ /**/
+ 1028,
/**/
--
I wonder, do vegetarians eat fruit bats?
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language -- http://www.Zimbu.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/vim_dev/202006211353.05LDrSKU1156372%40masaka.moolenaar.net.