changeset 28745:67f005ab37d7 v8.2.4897

patch 8.2.4897: comment inside an expression in lambda ignores the rest Commit: https://github.com/vim/vim/commit/39be4981cdd93a185b110536f84d99ce56e2c3cc Author: Bram Moolenaar <Bram@vim.org> Date: Fri May 6 21:51:50 2022 +0100 patch 8.2.4897: comment inside an expression in lambda ignores the rest Problem: Comment inside an expression in lambda ignores the rest of the expression. Solution: Truncate the line at the comment. (closes #10367)
author Bram Moolenaar <Bram@vim.org>
date Fri, 06 May 2022 23:00:03 +0200
parents e2e79020b778
children c6400ec5d91d
files src/eval.c src/testdir/test_lambda.vim src/version.c
diffstat 3 files changed, 21 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/eval.c
+++ b/src/eval.c
@@ -2208,8 +2208,15 @@ eval_next_line(char_u *arg, evalarg_T *e
     garray_T	*gap = &evalarg->eval_ga;
     char_u	*line;
 
-    if (arg != NULL && *arg == NL)
-	return skipwhite(arg + 1);
+    if (arg != NULL)
+    {
+	if (*arg == NL)
+	    return skipwhite(arg + 1);
+	// Truncate before a trailing comment, so that concatenating the lines
+	// won't turn the rest into a comment.
+	if (*skipwhite(arg) == '#')
+	    *arg = NUL;
+    }
 
     if (evalarg->eval_cookie != NULL)
 	line = evalarg->eval_getline(0, evalarg->eval_cookie, 0,
--- a/src/testdir/test_lambda.vim
+++ b/src/testdir/test_lambda.vim
@@ -70,6 +70,16 @@ func Test_lambda_vim9cmd_linebreak()
   exe 'sleep ' .. [20, 100, 500, 500, 500][g:run_nr] .. 'm'
   call assert_equal('done', g:result)
   unlet g:result
+
+  let lines =<< trim END
+      g:result = [0]->map((_, v) =>
+          1 # inline comment
+          +
+          2
+      )
+      assert_equal([3], g:result)
+  END
+  call v9.CheckDefAndScriptSuccess(lines)
 endfunc
 
 func Test_lambda_with_partial()
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    4897,
+/**/
     4896,
 /**/
     4895,