Mercurial > vim
changeset 31813:cd4065ab4503 v9.0.1239
patch 9.0.1239: cannot have a line break before an object member access
Commit: https://github.com/vim/vim/commit/b149d2279673aa89ab5e35958d05cc4bcc70f82a
Author: Bram Moolenaar <Bram@vim.org>
Date: Tue Jan 24 13:03:37 2023 +0000
patch 9.0.1239: cannot have a line break before an object member access
Problem: Cannot have a line break before an object member access.
Solution: Check for "." in next line. (closes https://github.com/vim/vim/issues/11864)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Tue, 24 Jan 2023 14:15:03 +0100 |
parents | 5544b9783693 |
children | 19d470f5723f |
files | src/eval.c src/testdir/test_vim9_class.vim src/version.c |
diffstat | 3 files changed, 32 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- 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])))))
--- 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()