]> granicus.if.org Git - vim/commitdiff
patch 8.2.4371: Vim9: can create a script variable from a legacy function v8.2.4371
authorBram Moolenaar <Bram@vim.org>
Sun, 13 Feb 2022 13:56:29 +0000 (13:56 +0000)
committerBram Moolenaar <Bram@vim.org>
Sun, 13 Feb 2022 13:56:29 +0000 (13:56 +0000)
Problem:    Vim9: can create a script variable from a legacy function.
Solution:   Disallow creating a script variable from a function.

src/errors.h
src/evalvars.c
src/testdir/test_vim9_script.vim
src/version.c

index ef9e0834617fd1083fb7f9dad5da89058a4bcae4..c5a2649a5c101101bbee0a838ffa495730b65298 100644 (file)
@@ -3234,4 +3234,6 @@ EXTERN char e_function_name_must_start_with_capital_str[]
        INIT(= N_("E1267: Function name must start with a capital: %s"));
 EXTERN char e_cannot_use_s_colon_in_vim9_script_str[]
        INIT(= N_("E1268: Cannot use s: in Vim9 script: %s"));
+EXTERN char e_cannot_create_vim9_script_variable_in_function_str[]
+       INIT(= N_("E1269: Cannot create a Vim9 script variable in a function: %s"));
 #endif
index 994b9799c84d99a5bfb1613731e5c1d11db9b11c..d182a0e85a148310fc8beeada16a41b12a86f23c 100644 (file)
@@ -3504,6 +3504,12 @@ set_var_const(
            semsg(_(e_cannot_use_str_itself_it_is_imported), name);
            goto failed;
        }
+       if (!in_vim9script())
+       {
+           semsg(_(e_cannot_create_vim9_script_variable_in_function_str),
+                                                                        name);
+           goto failed;
+       }
     }
 
     if (dest_tv == NULL)
index eec19d94fbb22736fd524141e427c0bc55a35523..9993c5edb39c74f34b678c41d85d7e947e148754 100644 (file)
@@ -3071,13 +3071,21 @@ def Test_forward_declaration()
   delete('Xforward')
 enddef
 
-def Test_declare_script_in_func()
+def Test_declare_script_var_in_func()
   var lines =<< trim END
       vim9script
       func Declare()
         let s:local = 123
       endfunc
       Declare()
+  END
+  v9.CheckScriptFailure(lines, 'E1269:')
+enddef
+        
+def Test_lock_script_var()
+  var lines =<< trim END
+      vim9script
+      var local = 123
       assert_equal(123, local)
 
       var error: string
index b7fbbbd8b6ab8d7ef5daa0f1947323beb247c043..3edb62d266aceaca214e715b6217dc28ddfd5bea 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    4371,
 /**/
     4370,
 /**/