# HG changeset patch # User Bram Moolenaar # Date 1606912204 -3600 # Node ID b3124656f050c31293b3dbd4a97235c019dfb50f # Parent 916779898006ccc39fce90619c971f066c4eba63 patch 8.2.2079: Vim9: cannot put a linebreak before or after "in" of ":for" Commit: https://github.com/vim/vim/commit/38bd8de551225bfca133805f21cee2592f0c759d Author: Bram Moolenaar Date: Wed Dec 2 13:23:36 2020 +0100 patch 8.2.2079: Vim9: cannot put a linebreak before or after "in" of ":for" Problem: Vim9: cannot put a linebreak before or after "in" of ":for". Solution: Skip over linebreak. diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim --- a/src/testdir/test_vim9_script.vim +++ b/src/testdir/test_vim9_script.vim @@ -1849,6 +1849,28 @@ def Test_for_loop() concat ..= str endfor assert_equal('onetwo', concat) + + var total = 0 + for nr in + [1, 2, 3] + total += nr + endfor + assert_equal(6, total) + + total = 0 + for nr + in [1, 2, 3] + total += nr + endfor + assert_equal(6, total) + + total = 0 + for nr + in + [1, 2, 3] + total += nr + endfor + assert_equal(6, total) enddef def Test_for_loop_fails() diff --git a/src/version.c b/src/version.c --- 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 */ /**/ + 2079, +/**/ 2078, /**/ 2077, diff --git a/src/vim9compile.c b/src/vim9compile.c --- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -6486,6 +6486,7 @@ compile_for(char_u *arg_start, cctx_T *c char_u *arg_end; char_u *name = NULL; char_u *p; + char_u *wp; int var_count = 0; int semicolon = FALSE; size_t varlen; @@ -6503,13 +6504,19 @@ compile_for(char_u *arg_start, cctx_T *c var_count = 1; // consume "in" + wp = p; p = skipwhite(p); - if (STRNCMP(p, "in", 2) != 0 || !VIM_ISWHITE(p[2])) + if (may_get_next_line_error(wp, &p, cctx) == FAIL) + return NULL; + if (STRNCMP(p, "in", 2) != 0 || !IS_WHITE_OR_NUL(p[2])) { emsg(_(e_missing_in)); return NULL; } - p = skipwhite(p + 2); + wp = p + 2; + p = skipwhite(wp); + if (may_get_next_line_error(wp, &p, cctx) == FAIL) + return NULL; scope = new_scope(cctx, FOR_SCOPE); if (scope == NULL)