]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 8.2.1024: Vim9: no error for using "let g:var = val" v8.2.1024
authorBram Moolenaar <Bram@vim.org>
Sat, 20 Jun 2020 20:50:47 +0000 (22:50 +0200)
committerBram Moolenaar <Bram@vim.org>
Sat, 20 Jun 2020 20:50:47 +0000 (22:50 +0200)
Problem:    Vim9: no error for using "let g:var = val".
Solution:   Add an error.

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

index 187670a6cbc99ccf789098928dcee8e5319320a3..91883ddc40d1190a6872be62d00a9f9cd0a2d90a 100644 (file)
@@ -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);
index 8cc93857d772d5e0fdb2097618bef08720049ac7..b6356a360098a182a55b82ba6ba2f6a055087d93 100644 (file)
@@ -1788,6 +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_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"));
index abfa3b588ec7b9f25081950560d65cb594e02fae..caeab192853cacc42cf90433a49ba4e1fdf97e93 100644 (file)
@@ -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
     {
index 9addf1ae19f40fecdda44c838608c4404567f5a6..ce9dfbcbfd261e27d1f19748692237088855f96c 100644 (file)
@@ -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
 
index 557b90bcc57ba0b1828b784c6cbbb2e61a250958..2862289e401df3db436d4cbe6598b991279214e9 100644 (file)
@@ -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
index 499699c17ab3e7fb73288a5271b50d21cce4e2d9..6a9d4ba3681844883ae2285da42496e70dc4a7d8 100644 (file)
@@ -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)
 
index d1587a2069b89e3c9f597cf211b284aa8ad87d00..ec1fc87310eec3b7c46bb2f4dbfdde5641d312ab 100644 (file)
@@ -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
index 97c8f871af6937f529e6e3b93489da3123f028a2..8a1b9edda8e339c1a793dd4c967b5362be1a1f94 100644 (file)
@@ -3325,6 +3325,9 @@ def_function(exarg_T *eap, char_u *name_arg)
 
     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;
 
index ab618af527d0f6119d2a360cc1f1bd5ca2f70ba5..47bf03e3bb81f0d4103c937c44dda91ee7f2ed74 100644 (file)
@@ -754,6 +754,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1024,
 /**/
     1023,
 /**/
index 2ac7a0a5650787e102a8b91ff0324724f6a1f8ad..54f47b9b98b2ad445c001f9e3c01370783ea39ad 100644 (file)
@@ -4871,8 +4871,7 @@ compile_assignment(char_u *arg, exarg_T *eap, cmdidx_T cmdidx, cctx_T *cctx)
                dest = dest_global;
                if (is_decl)
                {
-                   semsg(_("E1016: Cannot declare a global variable: %s"),
-                                                                        name);
+                   semsg(_(e_declare_global), name);
                    goto theend;
                }
            }