Mercurial > vim
changeset 23066:b3124656f050 v8.2.2079
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 <Bram@vim.org>
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.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Wed, 02 Dec 2020 13:30:04 +0100 |
parents | 916779898006 |
children | d65e8d80869b |
files | src/testdir/test_vim9_script.vim src/version.c src/vim9compile.c |
diffstat | 3 files changed, 33 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- 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()
--- 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,
--- 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)