From 39be4981cdd93a185b110536f84d99ce56e2c3cc Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Fri, 6 May 2022 21:51:50 +0100 Subject: [PATCH] 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) --- src/eval.c | 11 +++++++++-- src/testdir/test_lambda.vim | 10 ++++++++++ src/version.c | 2 ++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/eval.c b/src/eval.c index 317446c76..41094cd69 100644 --- a/src/eval.c +++ b/src/eval.c @@ -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, diff --git a/src/testdir/test_lambda.vim b/src/testdir/test_lambda.vim index a5dce93e4..130a08108 100644 --- 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() diff --git a/src/version.c b/src/version.c index d20ecf216..be7bb22f8 100644 --- a/src/version.c +++ b/src/version.c @@ -746,6 +746,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 4897, /**/ 4896, /**/ -- 2.40.0