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:
28
src/eval.c
28
src/eval.c
@@ -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()
|
||||
|
Reference in New Issue
Block a user