diff options
author | Bram Moolenaar <Bram@vim.org> | 2023-01-24 13:03:37 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2023-01-24 13:03:37 +0000 |
commit | b149d2279673aa89ab5e35958d05cc4bcc70f82a (patch) | |
tree | f659703345e44914d5979341aa7f3180efcb25e7 | |
parent | 5c8771bc5a2be123ab8e6325fa60ed524e8efb09 (diff) | |
download | vim-git-b149d2279673aa89ab5e35958d05cc4bcc70f82a.tar.gz |
patch 9.0.1239: cannot have a line break before an object member accessv9.0.1239
Problem: Cannot have a line break before an object member access.
Solution: Check for "." in next line. (closes #11864)
-rw-r--r-- | src/eval.c | 5 | ||||
-rw-r--r-- | src/testdir/test_vim9_class.vim | 26 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 32 insertions, 1 deletions
diff --git a/src/eval.c b/src/eval.c index 2a8b1c52e..699f43bac 100644 --- a/src/eval.c +++ b/src/eval.c @@ -6747,7 +6747,10 @@ handle_subscript( // the next line then consume the line break. p = eval_next_non_blank(*arg, evalarg, &getnext); if (getnext - && ((rettv->v_type == VAR_DICT && *p == '.' && eval_isdictc(p[1])) + && ((*p == '.' + && ((rettv->v_type == VAR_DICT && eval_isdictc(p[1])) + || rettv->v_type == VAR_CLASS + || rettv->v_type == VAR_OBJECT)) || (p[0] == '-' && p[1] == '>' && (p[2] == '{' || ASCII_ISALPHA(in_vim9script() ? *skipwhite(p + 2) : p[2]))))) diff --git a/src/testdir/test_vim9_class.vim b/src/testdir/test_vim9_class.vim index 03798268a..a3fdbdb9c 100644 --- a/src/testdir/test_vim9_class.vim +++ b/src/testdir/test_vim9_class.vim @@ -439,6 +439,32 @@ def Test_class_object_member_access() var c = MyCar.new("def") END v9.CheckScriptFailure(lines, 'E1041:') + + lines =<< trim END + vim9script + + class Foo + this.x: list<number> = [] + + def Add(n: number): any + this.x->add(n) + return this + enddef + endclass + + echo Foo.new().Add(1).Add(2).x + echo Foo.new().Add(1).Add(2) + .x + echo Foo.new().Add(1) + .Add(2).x + echo Foo.new() + .Add(1).Add(2).x + echo Foo.new() + .Add(1) + .Add(2) + .x + END + v9.CheckScriptSuccess(lines) enddef def Test_class_object_compare() diff --git a/src/version.c b/src/version.c index 9eff9696b..f21a1887a 100644 --- a/src/version.c +++ b/src/version.c @@ -696,6 +696,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1239, +/**/ 1238, /**/ 1237, |