Mercurial > vim
changeset 24852:3c8bd1d392d1 v8.2.2964
patch 8.2.2964: Vim9: hang when using space after ->
Commit: https://github.com/vim/vim/commit/a733042b124357225e4081e10ef28591236c6077
Author: Bram Moolenaar <Bram@vim.org>
Date: Tue Jun 8 20:46:45 2021 +0200
patch 8.2.2964: Vim9: hang when using space after ->
Problem: Vim9: hang when using space after ->. (Naohiro Ono)
Solution: Skip over white space to find the function name. (closes https://github.com/vim/vim/issues/8341)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Tue, 08 Jun 2021 21:00:03 +0200 |
parents | 528e605caece |
children | 7368193075a1 |
files | src/eval.c src/testdir/test_vim9_expr.vim src/version.c src/vim9compile.c |
diffstat | 4 files changed, 11 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/eval.c +++ b/src/eval.c @@ -5786,8 +5786,9 @@ handle_subscript( p = eval_next_non_blank(*arg, evalarg, &getnext); if (getnext && ((rettv->v_type == VAR_DICT && *p == '.' && eval_isdictc(p[1])) - || (p[0] == '-' && p[1] == '>' - && (p[2] == '{' || ASCII_ISALPHA(p[2]))))) + || (p[0] == '-' && p[1] == '>' && (p[2] == '{' + || ASCII_ISALPHA(in_vim9script() ? *skipwhite(p + 2) + : p[2]))))) { *arg = eval_next_line(evalarg); p = *arg;
--- a/src/testdir/test_vim9_expr.vim +++ b/src/testdir/test_vim9_expr.vim @@ -2961,6 +2961,10 @@ def Test_expr7_method_call() var Join = (l) => join(l, 'x') assert_equal('axb', ['a', 'b']->(Join)()) + + var sorted = [3, 1, 2] + -> sort() + assert_equal([1, 2, 3], sorted) END CheckDefAndScriptSuccess(lines) enddef
--- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2964, +/**/ 2963, /**/ 2962,
--- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -4108,7 +4108,8 @@ compile_subscript( // Also if a following line starts with ".x". if (next != NULL && ((next[0] == '-' && next[1] == '>' - && (next[2] == '{' || ASCII_ISALPHA(next[2]))) + && (next[2] == '{' + || ASCII_ISALPHA(*skipwhite(next + 2)))) || (next[0] == '.' && eval_isdictc(next[1])))) { next = next_line_from_context(cctx, TRUE);