# HG changeset patch # User Bram Moolenaar # Date 1597253404 -7200 # Node ID 9529a2367d3e83a005b4e259a57bca0edbcc5a8e # Parent 283490dee44d863e3ec1e732a39cc035844b1cd0 patch 8.2.1433: Vim9: cannot mingle comments in multi-line lambda Commit: https://github.com/vim/vim/commit/ba60cc45e786166767ca80f3dea6236d993c7971 Author: Bram Moolenaar 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) diff --git a/src/testdir/test_vim9_expr.vim b/src/testdir/test_vim9_expr.vim --- 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 diff --git a/src/version.c b/src/version.c --- 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, diff --git a/src/vim9compile.c b/src/vim9compile.c --- 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; }