1
0
forked from aniani/vim

patch 8.2.2257: Vim9: using -> for lambda is ambiguous

Problem:    Vim9: using -> for lambda is ambiguous.
Solution:   Stop supporting ->, must use =>.
This commit is contained in:
Bram Moolenaar
2020-12-31 21:28:47 +01:00
parent adc8e44645
commit 2949cfdbe4
10 changed files with 137 additions and 173 deletions

View File

@@ -3316,7 +3316,10 @@ eval7(
* 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 @@ eval_lambda(
*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 @@ handle_subscript(
*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()