diff options
author | Yegappan Lakshmanan <yegappan@yahoo.com> | 2023-08-29 22:32:02 +0200 |
---|---|---|
committer | Christian Brabandt <cb@256bit.org> | 2023-08-29 22:34:36 +0200 |
commit | e3b6c78ddc4acf238af35d7fac585e7ead27392f (patch) | |
tree | 793ec0292511758292951d2e07ccd39ecdec7db9 /src/testdir | |
parent | 4b9777a1dfc10bd2634404cb039a0df539549c93 (diff) |
patch 9.0.1822: Vim9: no check for duplicate members in extended classesv9.0.1822
Problem: Vim9: no check for duplicate members in extended classes
Solution: Check for duplicate members in extended classes.
Fix memory leak.
closes: #12948
Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Diffstat (limited to 'src/testdir')
-rw-r--r-- | src/testdir/test_vim9_class.vim | 124 |
1 files changed, 115 insertions, 9 deletions
diff --git a/src/testdir/test_vim9_class.vim b/src/testdir/test_vim9_class.vim index 184e96de0c..97be92d1a2 100644 --- a/src/testdir/test_vim9_class.vim +++ b/src/testdir/test_vim9_class.vim @@ -2376,7 +2376,7 @@ def Test_extends_method_crashes_vim() endclass class Bool extends Property - this.value: bool + this.value2: bool endclass def Observe(obj: Property, who: Observer) @@ -2594,13 +2594,10 @@ def Test_multi_level_member_access() class A this.val1: number = 0 - this.val2: number = 0 - this.val3: number = 0 endclass class B extends A this.val2: number = 0 - this.val3: number = 0 endclass class C extends B @@ -2609,14 +2606,11 @@ def Test_multi_level_member_access() def A_members(a: A) a.val1 += 1 - a.val2 += 1 - a.val3 += 1 enddef def B_members(b: B) b.val1 += 1 b.val2 += 1 - b.val3 += 1 enddef def C_members(c: C) @@ -2630,8 +2624,8 @@ def Test_multi_level_member_access() B_members(cobj) C_members(cobj) assert_equal(3, cobj.val1) - assert_equal(3, cobj.val2) - assert_equal(3, cobj.val3) + assert_equal(2, cobj.val2) + assert_equal(1, cobj.val3) END v9.CheckScriptSuccess(lines) enddef @@ -3545,6 +3539,118 @@ def Test_dup_member_variable() assert_equal(20, c.val) END v9.CheckScriptSuccess(lines) + + # Duplicate object member variable in a derived class + lines =<< trim END + vim9script + class A + this.val = 10 + endclass + class B extends A + endclass + class C extends B + this.val = 20 + endclass + END + v9.CheckScriptFailure(lines, 'E1369: Duplicate member: val') + + # Duplicate object private member variable in a derived class + lines =<< trim END + vim9script + class A + this._val = 10 + endclass + class B extends A + endclass + class C extends B + this._val = 20 + endclass + END + v9.CheckScriptFailure(lines, 'E1369: Duplicate member: _val') + + # Duplicate object private member variable in a derived class + lines =<< trim END + vim9script + class A + this.val = 10 + endclass + class B extends A + endclass + class C extends B + this._val = 20 + endclass + END + v9.CheckScriptFailure(lines, 'E1369: Duplicate member: _val') + + # Duplicate object member variable in a derived class + lines =<< trim END + vim9script + class A + this._val = 10 + endclass + class B extends A + endclass + class C extends B + this.val = 20 + endclass + END + v9.CheckScriptFailure(lines, 'E1369: Duplicate member: val') + + # Duplicate class member variable in a derived class + lines =<< trim END + vim9script + class A + static val = 10 + endclass + class B extends A + endclass + class C extends B + static val = 20 + endclass + END + v9.CheckScriptFailure(lines, 'E1369: Duplicate member: val') + + # Duplicate private class member variable in a derived class + lines =<< trim END + vim9script + class A + static _val = 10 + endclass + class B extends A + endclass + class C extends B + static _val = 20 + endclass + END + v9.CheckScriptFailure(lines, 'E1369: Duplicate member: _val') + + # Duplicate private class member variable in a derived class + lines =<< trim END + vim9script + class A + static val = 10 + endclass + class B extends A + endclass + class C extends B + static _val = 20 + endclass + END + v9.CheckScriptFailure(lines, 'E1369: Duplicate member: _val') + + # Duplicate class member variable in a derived class + lines =<< trim END + vim9script + class A + static _val = 10 + endclass + class B extends A + endclass + class C extends B + static val = 20 + endclass + END + v9.CheckScriptFailure(lines, 'E1369: Duplicate member: val') enddef " vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker |