changeset 21767:9529a2367d3e v8.2.1433

patch 8.2.1433: Vim9: cannot mingle comments in multi-line lambda Commit: https://github.com/vim/vim/commit/ba60cc45e786166767ca80f3dea6236d993c7971 Author: Bram Moolenaar <Bram@vim.org> Date: Wed Aug 12 19:15:33 2020 +0200 patch 8.2.1433: Vim9: cannot mingle comments in multi-line lambda Problem: Vim9: cannot mingle comments in multi-line lambda. Solution: Skip over NULL lines. (closes https://github.com/vim/vim/issues/6694)
author Bram Moolenaar <Bram@vim.org>
date Wed, 12 Aug 2020 19:30:04 +0200
parents 283490dee44d
children c680589182eb
files src/testdir/test_vim9_expr.vim src/version.c src/vim9compile.c
diffstat 3 files changed, 24 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/testdir/test_vim9_expr.vim
+++ b/src/testdir/test_vim9_expr.vim
@@ -1433,6 +1433,16 @@ def Test_expr7_list_vim9script()
   CheckScriptFailure(lines, 'E1068:')
 enddef
 
+def LambdaWithComments(): func
+  return {x ->
+            # some comment
+            x == 1
+            # some comment
+            ||
+            x == 2
+        }
+enddef
+
 def Test_expr7_lambda()
   let La = { -> 'result'}
   assert_equal('result', La())
@@ -1466,6 +1476,11 @@ def Test_expr7_lambda()
   assert_equal([{'key': 12}], filter(dl,
 	{_, v -> has_key(v, 'key') ? v['key'] == 12 : 0}))
 
+  assert_equal(false, LambdaWithComments()(0))
+  assert_equal(true, LambdaWithComments()(1))
+  assert_equal(true, LambdaWithComments()(2))
+  assert_equal(false, LambdaWithComments()(3))
+
   call CheckDefFailure(["filter([1, 2], {k,v -> 1})"], 'E1069:')
 enddef
 
--- a/src/version.c
+++ b/src/version.c
@@ -755,6 +755,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1433,
+/**/
     1432,
 /**/
     1431,
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -1729,11 +1729,13 @@ peek_next_line_from_context(cctx_T *cctx
 	char_u *line = ((char_u **)cctx->ctx_ufunc->uf_lines.ga_data)[lnum];
 	char_u *p;
 
-	if (line == NULL)
-	    break;
-	p = skipwhite(line);
-	if (*p != NUL && !vim9_comment_start(p))
-	    return p;
+	// ignore NULLs inserted for continuation lines
+	if (line != NULL)
+	{
+	    p = skipwhite(line);
+	    if (*p != NUL && !vim9_comment_start(p))
+		return p;
+	}
     }
     return NULL;
 }