summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/errors.h2
-rw-r--r--src/testdir/test_vim9_cmd.vim4
-rw-r--r--src/testdir/test_vim9_script.vim2
-rw-r--r--src/version.c2
-rw-r--r--src/vim9compile.c14
5 files changed, 16 insertions, 8 deletions
diff --git a/src/errors.h b/src/errors.h
index 31f275d17..8d8a2ca9a 100644
--- a/src/errors.h
+++ b/src/errors.h
@@ -850,3 +850,5 @@ EXTERN char e_string_list_or_blob_required_for_argument_nr[]
INIT(= N_("E1252: String, List or Blob required for argument %d"));
EXTERN char e_string_expected_for_argument_nr[]
INIT(= N_("E1253: String expected for argument %d"));
+EXTERN char e_cannot_use_script_variable_in_for_loop[]
+ INIT(= N_("E1254: Cannot use script variable in for loop"));
diff --git a/src/testdir/test_vim9_cmd.vim b/src/testdir/test_vim9_cmd.vim
index 2d86b6ba3..6347a282a 100644
--- a/src/testdir/test_vim9_cmd.vim
+++ b/src/testdir/test_vim9_cmd.vim
@@ -1392,6 +1392,10 @@ def Test_lockvar()
s:theList[1] = 44
assert_equal([1, 44, 3], s:theList)
+ if 0
+ lockvar whatever
+ endif
+
var d = {a: 1, b: 2}
d.a = 3
d.b = 4
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index af80935ab..fe985de35 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -2963,7 +2963,7 @@ enddef
def Test_for_loop_script_var()
# cannot use s:var in a :def function
- CheckDefFailure(['for s:var in range(3)', 'echo 3'], 'E461:')
+ CheckDefFailure(['for s:var in range(3)', 'echo 3'], 'E1254:')
# can use s:var in Vim9 script, with or without s:
var lines =<< trim END
diff --git a/src/version.c b/src/version.c
index a7f372dd6..38c9e0098 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 */
/**/
+ 3859,
+/**/
3858,
/**/
3857,
diff --git a/src/vim9compile.c b/src/vim9compile.c
index 2b27f514c..4bce9972d 100644
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -8333,7 +8333,6 @@ compile_for(char_u *arg_start, cctx_T *cctx)
lhs_type = parse_type(&p, cctx->ctx_type_list, TRUE);
}
- // Script var is not supported.
if (get_var_dest(name, &dest, CMD_for, &opt_flags,
&vimvaridx, &type, cctx) == FAIL)
goto failed;
@@ -8351,17 +8350,18 @@ compile_for(char_u *arg_start, cctx_T *cctx)
}
else
{
- if (!valid_varname(arg, (int)varlen, FALSE))
- goto failed;
- if (lookup_local(arg, varlen, NULL, cctx) == OK)
+ // Script var is not supported.
+ if (STRNCMP(name, "s:", 2) == 0)
{
- semsg(_(e_variable_already_declared), arg);
+ emsg(_(e_cannot_use_script_variable_in_for_loop));
goto failed;
}
- if (STRNCMP(name, "s:", 2) == 0)
+ if (!valid_varname(arg, (int)varlen, FALSE))
+ goto failed;
+ if (lookup_local(arg, varlen, NULL, cctx) == OK)
{
- semsg(_(e_cannot_declare_script_variable_in_function), name);
+ semsg(_(e_variable_already_declared), arg);
goto failed;
}