diff options
author | Bram Moolenaar <Bram@vim.org> | 2020-07-11 15:20:48 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2020-07-11 15:20:48 +0200 |
commit | 914e7eaa67f8d816e15fb4a1180e6bece88d9742 (patch) | |
tree | 0d5e3deec46b656eca8bcbb3c77b5d94490c032b | |
parent | 21e5bdd271fa4d0ff4511cf74b160315e1d17cff (diff) | |
download | vim-git-914e7eaa67f8d816e15fb4a1180e6bece88d9742.tar.gz |
patch 8.2.1182: Vim9: no check for whitespace after comma in lambdav8.2.1182
Problem: Vim9: no check for whitespace after comma in lambda.
Solution: Give error if white space is missing.
-rw-r--r-- | src/testdir/test_vim9_expr.vim | 3 | ||||
-rw-r--r-- | src/testdir/test_vim9_func.vim | 2 | ||||
-rw-r--r-- | src/userfunc.c | 12 | ||||
-rw-r--r-- | src/version.c | 2 |
4 files changed, 16 insertions, 3 deletions
diff --git a/src/testdir/test_vim9_expr.vim b/src/testdir/test_vim9_expr.vim index ef56a6711..edc655aea 100644 --- a/src/testdir/test_vim9_expr.vim +++ b/src/testdir/test_vim9_expr.vim @@ -1067,10 +1067,11 @@ def Test_expr7_list_vim9script() enddef def Test_expr7_lambda() - " lambda let La = { -> 'result'} assert_equal('result', La()) assert_equal([1, 3, 5], [1, 2, 3]->map({key, val -> key + val})) + + call CheckDefFailure(["filter([1, 2], {k,v -> 1})"], 'E1069:') enddef def Test_expr7_lambda_vim9script() diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim index f09ecc9b3..77ada9480 100644 --- a/src/testdir/test_vim9_func.vim +++ b/src/testdir/test_vim9_func.vim @@ -967,7 +967,7 @@ enddef def Line_continuation_in_lambda(): list<number> let x = range(97, 100) - ->map({_,v -> nr2char(v) + ->map({_, v -> nr2char(v) ->toupper()}) ->reverse() return x diff --git a/src/userfunc.c b/src/userfunc.c index 2f253c95f..b5b57ec88 100644 --- a/src/userfunc.c +++ b/src/userfunc.c @@ -266,10 +266,20 @@ get_function_args( else if (any_default) { emsg(_("E989: Non-default argument follows default argument")); - mustend = TRUE; + goto err_ret; } if (*p == ',') + { ++p; + // Don't give this error when skipping, it makes the "->" not + // found in "{k,v -> x}" and give a confusing error. + if (!skip && in_vim9script() + && !IS_WHITE_OR_NUL(*p) && *p != endchar) + { + semsg(_(e_white_after), ","); + goto err_ret; + } + } else mustend = TRUE; } diff --git a/src/version.c b/src/version.c index bbb2c28f8..c15cc0461 100644 --- 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 */ /**/ + 1182, +/**/ 1181, /**/ 1180, |