comparison src/eval.c @ 23428:5807e3958e38 v8.2.2257

patch 8.2.2257: Vim9: using -> for lambda is ambiguous Commit: https://github.com/vim/vim/commit/2949cfdbe4335b9abcfeda1be4dfc52090ee1df6 Author: Bram Moolenaar <Bram@vim.org> Date: Thu Dec 31 21:28:47 2020 +0100 patch 8.2.2257: Vim9: using -> for lambda is ambiguous Problem: Vim9: using -> for lambda is ambiguous. Solution: Stop supporting ->, must use =>.
author Bram Moolenaar <Bram@vim.org>
date Thu, 31 Dec 2020 21:30:03 +0100
parents 108039938e3c
children b1dbbc81a011
comparison
equal deleted inserted replaced
23427:8f2dcc0cfcf6 23428:5807e3958e38
3314 3314
3315 /* 3315 /*
3316 * Lambda: {arg, arg -> expr} 3316 * Lambda: {arg, arg -> expr}
3317 * Dictionary: {'key': val, 'key': val} 3317 * Dictionary: {'key': val, 'key': val}
3318 */ 3318 */
3319 case '{': ret = get_lambda_tv(arg, rettv, in_vim9script(), evalarg); 3319 case '{': if (in_vim9script())
3320 ret = NOTDONE;
3321 else
3322 ret = get_lambda_tv(arg, rettv, in_vim9script(), evalarg);
3320 if (ret == NOTDONE) 3323 if (ret == NOTDONE)
3321 ret = eval_dict(arg, rettv, evalarg, FALSE); 3324 ret = eval_dict(arg, rettv, evalarg, FALSE);
3322 break; 3325 break;
3323 3326
3324 /* 3327 /*
3615 3618
3616 // Skip over the ->. 3619 // Skip over the ->.
3617 *arg += 2; 3620 *arg += 2;
3618 rettv->v_type = VAR_UNKNOWN; 3621 rettv->v_type = VAR_UNKNOWN;
3619 3622
3620 ret = get_lambda_tv(arg, rettv, FALSE, evalarg); 3623 if (**arg == '{')
3624 {
3625 // ->{lambda}()
3626 ret = get_lambda_tv(arg, rettv, FALSE, evalarg);
3627 }
3628 else
3629 {
3630 // ->(lambda)()
3631 ++*arg;
3632 ret = eval1(arg, rettv, evalarg);
3633 *arg = skipwhite_and_linebreak(*arg, evalarg);
3634 if (**arg != ')')
3635 {
3636 emsg(_(e_missing_close));
3637 ret = FAIL;
3638 }
3639 ++*arg;
3640 }
3621 if (ret != OK) 3641 if (ret != OK)
3622 return FAIL; 3642 return FAIL;
3623 else if (**arg != '(') 3643 else if (**arg != '(')
3624 { 3644 {
3625 if (verbose) 3645 if (verbose)
5643 else if (p[0] == '-' && p[1] == '>') 5663 else if (p[0] == '-' && p[1] == '>')
5644 { 5664 {
5645 *arg = p; 5665 *arg = p;
5646 if (ret == OK) 5666 if (ret == OK)
5647 { 5667 {
5648 if ((*arg)[2] == '{') 5668 if (((*arg)[2] == '{' && !in_vim9script()) || (*arg)[2] == '(')
5649 // expr->{lambda}() 5669 // expr->{lambda}() or expr->(lambda)()
5650 ret = eval_lambda(arg, rettv, evalarg, verbose); 5670 ret = eval_lambda(arg, rettv, evalarg, verbose);
5651 else 5671 else
5652 // expr->name() 5672 // expr->name()
5653 ret = eval_method(arg, rettv, evalarg, verbose); 5673 ret = eval_method(arg, rettv, evalarg, verbose);
5654 } 5674 }