patch 8.2.2257: Vim9: using -> for lambda is ambiguous
Problem: Vim9: using -> for lambda is ambiguous.
Solution: Stop supporting ->, must use =>.
diff --git a/src/eval.c b/src/eval.c
index 06d2600..ac3e53f 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -3316,7 +3316,10 @@
* Lambda: {arg, arg -> expr}
* Dictionary: {'key': val, 'key': val}
*/
- case '{': ret = get_lambda_tv(arg, rettv, in_vim9script(), evalarg);
+ case '{': if (in_vim9script())
+ ret = NOTDONE;
+ else
+ ret = get_lambda_tv(arg, rettv, in_vim9script(), evalarg);
if (ret == NOTDONE)
ret = eval_dict(arg, rettv, evalarg, FALSE);
break;
@@ -3617,7 +3620,24 @@
*arg += 2;
rettv->v_type = VAR_UNKNOWN;
- ret = get_lambda_tv(arg, rettv, FALSE, evalarg);
+ if (**arg == '{')
+ {
+ // ->{lambda}()
+ ret = get_lambda_tv(arg, rettv, FALSE, evalarg);
+ }
+ else
+ {
+ // ->(lambda)()
+ ++*arg;
+ ret = eval1(arg, rettv, evalarg);
+ *arg = skipwhite_and_linebreak(*arg, evalarg);
+ if (**arg != ')')
+ {
+ emsg(_(e_missing_close));
+ ret = FAIL;
+ }
+ ++*arg;
+ }
if (ret != OK)
return FAIL;
else if (**arg != '(')
@@ -5645,8 +5665,8 @@
*arg = p;
if (ret == OK)
{
- if ((*arg)[2] == '{')
- // expr->{lambda}()
+ if (((*arg)[2] == '{' && !in_vim9script()) || (*arg)[2] == '(')
+ // expr->{lambda}() or expr->(lambda)()
ret = eval_lambda(arg, rettv, evalarg, verbose);
else
// expr->name()