From 75e27d78f5370e7d2e0898326d9b080937e7b090 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Sun, 13 Feb 2022 13:56:29 +0000 Subject: [PATCH] patch 8.2.4371: Vim9: can create a script variable from a legacy function Problem: Vim9: can create a script variable from a legacy function. Solution: Disallow creating a script variable from a function. --- src/errors.h | 2 ++ src/evalvars.c | 6 ++++++ src/testdir/test_vim9_script.vim | 10 +++++++++- src/version.c | 2 ++ 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/errors.h b/src/errors.h index ef9e08346..c5a2649a5 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 994b9799c..d182a0e85 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 eec19d94f..9993c5edb 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 b7fbbbd8b..3edb62d26 100644 --- a/src/version.c +++ b/src/version.c @@ -750,6 +750,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 4371, /**/ 4370, /**/ -- 2.50.1