Mercurial > vim
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 } |