From: Bram Moolenaar Date: Wed, 12 Aug 2020 17:15:33 +0000 (+0200) Subject: patch 8.2.1433: Vim9: cannot mingle comments in multi-line lambda X-Git-Tag: v8.2.1433 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ba60cc45e786166767ca80f3dea6236d993c7971;p=vim 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 #6694) --- diff --git a/src/testdir/test_vim9_expr.vim b/src/testdir/test_vim9_expr.vim index c87f2b221..d6313d363 100644 --- 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 index 5c942d742..e182ea6aa 100644 --- a/src/version.c +++ b/src/version.c @@ -754,6 +754,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1433, /**/ 1432, /**/ diff --git a/src/vim9compile.c b/src/vim9compile.c index 8b58d9688..87bb0e2c7 100644 --- 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; }