summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2022-02-13 13:56:29 +0000
committerBram Moolenaar <Bram@vim.org>2022-02-13 13:56:29 +0000
commit75e27d78f5370e7d2e0898326d9b080937e7b090 (patch)
tree410ddc3fcf6d8ebd84883143ef78d8923e75233b
parentcf6ad8ea8cff318877758b48d3786ab08251ab89 (diff)
patch 8.2.4371: Vim9: can create a script variable from a legacy functionv8.2.4371
Problem: Vim9: can create a script variable from a legacy function. Solution: Disallow creating a script variable from a function.
-rw-r--r--src/errors.h2
-rw-r--r--src/evalvars.c6
-rw-r--r--src/testdir/test_vim9_script.vim10
-rw-r--r--src/version.c2
4 files changed, 19 insertions, 1 deletions
diff --git a/src/errors.h b/src/errors.h
index ef9e083461..c5a2649a5c 100644
--- a/src/errors.h
+++ b/src/errors.h
@@ -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
diff --git a/src/evalvars.c b/src/evalvars.c
index 994b9799c8..d182a0e85a 100644
--- a/src/evalvars.c
+++ b/src/evalvars.c
@@ -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)
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index eec19d94fb..9993c5edb3 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -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
diff --git a/src/version.c b/src/version.c
index b7fbbbd8b6..3edb62d266 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 4371,
+/**/
4370,
/**/
4369,