From a99fb23842f055c511bfe1b62de7bbd14d5a99c0 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Mon, 20 Dec 2021 12:25:03 +0000 Subject: patch 8.2.3859: Vim9: some code lines not tested Problem: Vim9: some code lines not tested. Solution: Add a few specific tests. --- src/errors.h | 2 ++ src/testdir/test_vim9_cmd.vim | 4 ++++ src/testdir/test_vim9_script.vim | 2 +- src/version.c | 2 ++ src/vim9compile.c | 14 +++++++------- 5 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/errors.h b/src/errors.h index 31f275d171..8d8a2ca9a3 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 2d86b6ba3b..6347a282a6 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 af80935ab9..fe985de35c 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 a7f372dd62..38c9e0098d 100644 --- a/src/version.c +++ b/src/version.c @@ -749,6 +749,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 3859, /**/ 3858, /**/ diff --git a/src/vim9compile.c b/src/vim9compile.c index 2b27f514cd..4bce9972d2 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; } -- cgit v1.2.3