Mercurial > vim
changeset 20945:0653b9b72091 v8.2.1024
patch 8.2.1024: Vim9: no error for using "let g:var = val"
Commit: https://github.com/vim/vim/commit/6797966dfc0219313886be55767e53d5a388b5c5
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Jun 20 22:50:47 2020 +0200
patch 8.2.1024: Vim9: no error for using "let g:var = val"
Problem: Vim9: no error for using "let g:var = val".
Solution: Add an error.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 20 Jun 2020 23:00:04 +0200 |
parents | 75df4be5ecd8 |
children | 1f7590dfeaaf |
files | src/evalvars.c src/globals.h src/scriptfile.c src/structs.h src/testdir/test_vim9_disassemble.vim src/testdir/test_vim9_func.vim src/testdir/test_vim9_script.vim src/userfunc.c src/version.c src/vim9compile.c |
diffstat | 10 files changed, 33 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/src/evalvars.c +++ b/src/evalvars.c @@ -2864,6 +2864,14 @@ set_var_const( 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);
--- a/src/globals.h +++ b/src/globals.h @@ -1788,6 +1788,7 @@ EXTERN char e_no_white_before[] INIT(= N 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"));
--- a/src/scriptfile.c +++ b/src/scriptfile.c @@ -1873,7 +1873,7 @@ ex_scriptversion(exarg_T *eap UNUSED) nr = getdigits(&eap->arg); if (nr == 0 || *eap->arg != NUL) emsg(_(e_invarg)); - else if (nr > 4) + else if (nr > SCRIPT_VERSION_MAX) semsg(_("E999: scriptversion not supported: %d"), nr); else {
--- a/src/structs.h +++ b/src/structs.h @@ -67,6 +67,8 @@ typedef struct terminal_S term_T; typedef struct VimMenu vimmenu_T; #endif +// maximum value for sc_version +#define SCRIPT_VERSION_MAX 4 // value for sc_version in a Vim9 script file #define SCRIPT_VERSION_VIM9 999999
--- a/src/testdir/test_vim9_disassemble.vim +++ b/src/testdir/test_vim9_disassemble.vim @@ -1190,7 +1190,7 @@ def Test_vim9script_forward_func() def FuncTwo(): string return 'two' enddef - let g:res_FuncOne: string = execute('disass FuncOne') + g:res_FuncOne = execute('disass FuncOne') END writefile(lines, 'Xdisassemble') source Xdisassemble
--- a/src/testdir/test_vim9_func.vim +++ b/src/testdir/test_vim9_func.vim @@ -323,7 +323,7 @@ def Test_vim9script_call() str->MyFunc() assert_equal('barfoo', var) - let g:value = 'value' + g:value = 'value' g:value->MyFunc() assert_equal('value', var)
--- a/src/testdir/test_vim9_script.vim +++ b/src/testdir/test_vim9_script.vim @@ -1099,11 +1099,11 @@ def Test_if_const_expr() g:glob = 2 if false - execute('let g:glob = 3') + execute('g:glob = 3') endif assert_equal(2, g:glob) if true - execute('let g:glob = 3') + execute('g:glob = 3') endif assert_equal(3, g:glob) @@ -1790,8 +1790,8 @@ def Test_vim9_comment_gui() enddef def Test_vim9_comment_not_compiled() - au TabEnter *.vim let g:entered = 1 - au TabEnter *.x let g:entered = 2 + au TabEnter *.vim g:entered = 1 + au TabEnter *.x g:entered = 2 edit test.vim doautocmd TabEnter #comment @@ -1811,7 +1811,7 @@ def Test_vim9_comment_not_compiled() CheckScriptSuccess([ 'vim9script', - 'let g:var = 123', + 'g:var = 123', 'let w:var = 777', 'unlet g:var w:var # something', ]) @@ -1819,6 +1819,11 @@ def Test_vim9_comment_not_compiled() CheckScriptFailure([ 'vim9script', 'let g:var = 123', + ], 'E1016:') + + CheckScriptFailure([ + 'vim9script', + 'g:var = 123', 'unlet g:var# comment1', ], 'E108:') @@ -1889,11 +1894,11 @@ enddef def Test_finish() let lines =<< trim END vim9script - let g:res = 'one' + g:res = 'one' if v:false | finish | endif - let g:res = 'two' + g:res = 'two' finish - let g:res = 'three' + g:res = 'three' END writefile(lines, 'Xfinished') source Xfinished
--- a/src/userfunc.c +++ b/src/userfunc.c @@ -3325,6 +3325,9 @@ def_function(exarg_T *eap, char_u *name_ if (eap->cmdidx == CMD_def) set_function_type(fp); + else if (fp->uf_script_ctx.sc_version == SCRIPT_VERSION_VIM9) + // :func does not use Vim9 script syntax, even in a Vim9 script file + fp->uf_script_ctx.sc_version = SCRIPT_VERSION_MAX; goto ret_free;