]> granicus.if.org Git - vim/commitdiff
patch 8.2.2079: Vim9: cannot put a linebreak before or after "in" of ":for" v8.2.2079
authorBram Moolenaar <Bram@vim.org>
Wed, 2 Dec 2020 12:23:36 +0000 (13:23 +0100)
committerBram Moolenaar <Bram@vim.org>
Wed, 2 Dec 2020 12:23:36 +0000 (13:23 +0100)
Problem:    Vim9: cannot put a linebreak before or after "in" of ":for".
Solution:   Skip over linebreak.

src/testdir/test_vim9_script.vim
src/version.c
src/vim9compile.c

index a18e3f2a48fbb4a2d2c96b1746bce741f8c296f1..01396967fd5cf2068c6bc021b1089b64336968f6 100644 (file)
@@ -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()
index 2eb5de5fca41a02e5a56799075c575d4ac6d0ec6..3a205811249c29a5e383b5477169625f2e1aa417 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2079,
 /**/
     2078,
 /**/
index 7712c001cc66653d2c86bef2e34502d9fd0f8bce..07a22daa088d2b125f05d7aaff60b425f5300ed8 100644 (file)
@@ -6486,6 +6486,7 @@ compile_for(char_u *arg_start, cctx_T *cctx)
     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 *cctx)
        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)