Mercurial > vim
diff src/testdir/test_vim9_class.vim @ 33309:ab0ecf1bd6b5 v9.0.1920
patch 9.0.1920: Vim9: cannot write public var in nested object
Commit: https://github.com/vim/vim/commit/98e68c07ce229148c994a42ead9f010b0d0a1be4
Author: Ernie Rael <errael@raelity.com>
Date: Wed Sep 20 20:13:06 2023 +0200
patch 9.0.1920: Vim9: cannot write public var in nested object
Problem: Vim9: cannot write public var in nested object
Solution: Write variable in nested read-only object reference.
Also test write fails.
closes: #13130
closes: #13131
Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: Ernie Rael <errael@raelity.com>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Wed, 20 Sep 2023 20:30:04 +0200 |
parents | 6340c608ca54 |
children | 9062315f9de1 |
line wrap: on
line diff
--- a/src/testdir/test_vim9_class.vim +++ b/src/testdir/test_vim9_class.vim @@ -613,8 +613,63 @@ def Test_assignment_nested_type() enddef Test_assign_to_nested_typed_member() + + var script_inner = Inner.new(0) + var script_outer = Outer.new(script_inner) + script_outer.inner.value = 1 + assert_equal(1, script_inner.value) END v9.CheckSourceSuccess(lines) + + # Assignment where target item is read only in :def + lines =<< trim END + vim9script + + class Inner + this.value: number = 0 + endclass + + class Outer + this.inner: Inner + endclass + + def F(outer: Outer) + outer.inner.value = 1 + enddef + + def Test_assign_to_nested_typed_member() + var inner = Inner.new(0) + var outer = Outer.new(inner) + F(outer) + assert_equal(1, inner.value) + enddef + + Test_assign_to_nested_typed_member() + END + v9.CheckSourceFailure(lines, 'E46: Cannot change read-only variable "value"') + + # Assignment where target item is read only script level + lines =<< trim END + vim9script + + class Inner + this.value: number = 0 + endclass + + class Outer + this.inner: Inner + endclass + + def F(outer: Outer) + outer.inner.value = 1 + enddef + + var script_inner = Inner.new(0) + var script_outer = Outer.new(script_inner) + script_outer.inner.value = 1 + assert_equal(1, script_inner.value) + END + v9.CheckSourceFailure(lines, 'E1335: Member is not writable: value') enddef def Test_assignment_with_operator()