0
0
mirror of https://github.com/vim/vim.git synced 2025-10-04 05:25:06 -04:00

patch 9.0.1814: Vim9 no error on duplicate object member var

Problem:  Vim9 no error on duplicate object member var
Solution: detect duplicate members and error out

closes: #12938

Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: Yegappan Lakshmanan <yegappan@yahoo.com>
This commit is contained in:
Yegappan Lakshmanan
2023-08-28 21:26:23 +02:00
committed by Christian Brabandt
parent 1d3e0e8f31
commit 2ba9d2e14e
4 changed files with 167 additions and 12 deletions

View File

@@ -894,6 +894,15 @@ def Test_class_object_member_access()
endclass
END
v9.CheckScriptFailure(lines, 'E1065:')
# Test for "static" cannot be followed by "this".
lines =<< trim END
vim9script
class Something
static this.val = 1
endclass
END
v9.CheckScriptFailure(lines, 'E1368: Static cannot be followed by "this" in a member name')
enddef
def Test_class_object_compare()
@@ -3438,4 +3447,92 @@ def Test_objmethod_funcarg()
v9.CheckScriptSuccess(lines)
enddef
" Test for declaring duplicate object and class members
def Test_dup_member_variable()
# Duplicate member variable
var lines =<< trim END
vim9script
class C
this.val = 10
this.val = 20
endclass
END
v9.CheckScriptFailure(lines, 'E1369: Duplicate member: val')
# Duplicate private member variable
lines =<< trim END
vim9script
class C
this._val = 10
this._val = 20
endclass
END
v9.CheckScriptFailure(lines, 'E1369: Duplicate member: _val')
# Duplicate public member variable
lines =<< trim END
vim9script
class C
public this.val = 10
public this.val = 20
endclass
END
v9.CheckScriptFailure(lines, 'E1369: Duplicate member: val')
# Duplicate private member variable
lines =<< trim END
vim9script
class C
this.val = 10
this._val = 20
endclass
END
v9.CheckScriptFailure(lines, 'E1369: Duplicate member: _val')
# Duplicate public and private member variable
lines =<< trim END
vim9script
class C
this._val = 20
public this.val = 10
endclass
END
v9.CheckScriptFailure(lines, 'E1369: Duplicate member: val')
# Duplicate class member variable
lines =<< trim END
vim9script
class C
static s: string = "abc"
static _s: string = "def"
endclass
END
v9.CheckScriptFailure(lines, 'E1369: Duplicate member: _s')
# Duplicate public and private class member variable
lines =<< trim END
vim9script
class C
public static s: string = "abc"
static _s: string = "def"
endclass
END
v9.CheckScriptFailure(lines, 'E1369: Duplicate member: _s')
# Duplicate class and object member variable
lines =<< trim END
vim9script
class C
static val = 10
this.val = 20
def new()
enddef
endclass
var c = C.new()
assert_equal(10, C.val)
assert_equal(20, c.val)
END
v9.CheckScriptSuccess(lines)
enddef
" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker