]> granicus.if.org Git - vim/commitdiff
patch 8.2.4897: comment inside an expression in lambda ignores the rest v8.2.4897
authorBram Moolenaar <Bram@vim.org>
Fri, 6 May 2022 20:51:50 +0000 (21:51 +0100)
committerBram Moolenaar <Bram@vim.org>
Fri, 6 May 2022 20:51:50 +0000 (21:51 +0100)
Problem:    Comment inside an expression in lambda ignores the rest of the
            expression.
Solution:   Truncate the line at the comment. (closes #10367)

src/eval.c
src/testdir/test_lambda.vim
src/version.c

index 317446c7623da7a904ea53b5bc1e1621091e9868..41094cd69f055b4cdccb36c062b441be4ce03617 100644 (file)
@@ -2208,8 +2208,15 @@ eval_next_line(char_u *arg, evalarg_T *evalarg)
     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,
index a5dce93e46291117fb1cbb5f4889c3b6e20c3e5d..130a08108b26e09aee781baeda991353870b3220 100644 (file)
@@ -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()
index d20ecf21639d3382926f98c18317af7edc012211..be7bb22f815b2bfd77e120bb20d8e702153b44b6 100644 (file)
@@ -746,6 +746,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    4897,
 /**/
     4896,
 /**/