diff options
author | Bram Moolenaar <Bram@vim.org> | 2022-02-13 13:56:29 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2022-02-13 13:56:29 +0000 |
commit | 75e27d78f5370e7d2e0898326d9b080937e7b090 (patch) | |
tree | 410ddc3fcf6d8ebd84883143ef78d8923e75233b | |
parent | cf6ad8ea8cff318877758b48d3786ab08251ab89 (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.h | 2 | ||||
-rw-r--r-- | src/evalvars.c | 6 | ||||
-rw-r--r-- | src/testdir/test_vim9_script.vim | 10 | ||||
-rw-r--r-- | src/version.c | 2 |
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, |