From 914e7eaa67f8d816e15fb4a1180e6bece88d9742 Mon Sep 17 00:00:00 2001
From: Bram Moolenaar <Bram@vim.org>
Date: Sat, 11 Jul 2020 15:20:48 +0200
Subject: [PATCH] patch 8.2.1182: Vim9: no check for whitespace after comma in
 lambda

Problem:    Vim9: no check for whitespace after comma in lambda.
Solution:   Give error if white space is missing.
---
 src/testdir/test_vim9_expr.vim |  3 ++-
 src/testdir/test_vim9_func.vim |  2 +-
 src/userfunc.c                 | 12 +++++++++++-
 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 ef56a67111..edc655aeac 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 f09ecc9b3b..77ada94809 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 2f253c95fd..b5b57ec880 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 bbb2c28f8b..c15cc04610 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 */
+/**/
+    1182,
 /**/
     1181,
 /**/
-- 
GitLab