comparison src/testdir/test_vim9_class.vim @ 33738:2172872dfbcd v9.0.2096

patch 9.0.2096: Vim9: confusing usage of private Commit: https://github.com/vim/vim/commit/03042a2753e3e6ac971045a8ce256d709214710e Author: Ernie Rael <errael@raelity.com> Date: Sat Nov 11 08:53:32 2023 +0100 patch 9.0.2096: Vim9: confusing usage of private Problem: Vim9: confusing usage of private Solution: clarify and use protected keyword instead [vim9class] document `_` as protected instead of private fixes #13504 closes: #13520 Signed-off-by: Ernie Rael <errael@raelity.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
author Christian Brabandt <cb@256bit.org>
date Sat, 11 Nov 2023 09:00:06 +0100
parents b076a133faf9
children f0132690cdf9
comparison
equal deleted inserted replaced
33737:f065fe97d07a 33738:2172872dfbcd
322 enddef 322 enddef
323 endclass 323 endclass
324 END 324 END
325 v9.CheckSourceFailure(lines, 'E1388: Public keyword not supported for a method', 3) 325 v9.CheckSourceFailure(lines, 'E1388: Public keyword not supported for a method', 3)
326 326
327 # Using the "public" keyword when defining an object private method 327 # Using the "public" keyword when defining an object protected method
328 lines =<< trim END 328 lines =<< trim END
329 vim9script 329 vim9script
330 class A 330 class A
331 public def _Foo() 331 public def _Foo()
332 enddef 332 enddef
333 endclass 333 endclass
334 END 334 END
335 v9.CheckSourceFailure(lines, 'E1331: Public must be followed by "this" or "static"', 3) 335 v9.CheckSourceFailure(lines, 'E1331: Public must be followed by "this" or "static"', 3)
336 336
337 # Using the "public" keyword when defining a class private method 337 # Using the "public" keyword when defining a class protected method
338 lines =<< trim END 338 lines =<< trim END
339 vim9script 339 vim9script
340 class A 340 class A
341 public static def _Foo() 341 public static def _Foo()
342 enddef 342 enddef
604 F(outer_obj) 604 F(outer_obj)
605 assert_equal(1, inner_obj.value) 605 assert_equal(1, inner_obj.value)
606 END 606 END
607 v9.CheckSourceSuccess(lines) 607 v9.CheckSourceSuccess(lines)
608 608
609 # Try modifying a private variable using an "any" object 609 # Try modifying a protected variable using an "any" object
610 lines =<< trim END 610 lines =<< trim END
611 vim9script 611 vim9script
612 612
613 class Inner 613 class Inner
614 this._value: string = '' 614 this._value: string = ''
624 624
625 var inner_obj = Inner.new('a') 625 var inner_obj = Inner.new('a')
626 var outer_obj = Outer.new(inner_obj) 626 var outer_obj = Outer.new(inner_obj)
627 F(outer_obj) 627 F(outer_obj)
628 END 628 END
629 v9.CheckSourceFailure(lines, 'E1333: Cannot access private variable "_value" in class "Inner"', 1) 629 v9.CheckSourceFailure(lines, 'E1333: Cannot access protected variable "_value" in class "Inner"', 1)
630 630
631 # Try modifying a non-existing variable using an "any" object 631 # Try modifying a non-existing variable using an "any" object
632 lines =<< trim END 632 lines =<< trim END
633 vim9script 633 vim9script
634 634
1083 1083
1084 var trip = Triple.new() 1084 var trip = Triple.new()
1085 assert_equal(1, trip.GetOne()) 1085 assert_equal(1, trip.GetOne())
1086 assert_equal(2, trip.two) 1086 assert_equal(2, trip.two)
1087 assert_equal(3, trip.three) 1087 assert_equal(3, trip.three)
1088 assert_fails('echo trip._one', 'E1333: Cannot access private variable "_one" in class "Triple"') 1088 assert_fails('echo trip._one', 'E1333: Cannot access protected variable "_one" in class "Triple"')
1089 1089
1090 assert_fails('trip._one = 11', 'E1333: Cannot access private variable "_one" in class "Triple"') 1090 assert_fails('trip._one = 11', 'E1333: Cannot access protected variable "_one" in class "Triple"')
1091 assert_fails('trip.two = 22', 'E1335: Variable "two" in class "Triple" is not writable') 1091 assert_fails('trip.two = 22', 'E1335: Variable "two" in class "Triple" is not writable')
1092 trip.three = 33 1092 trip.three = 33
1093 assert_equal(33, trip.three) 1093 assert_equal(33, trip.three)
1094 1094
1095 assert_fails('trip.four = 4', 'E1326: Variable "four" not found in object "Triple"') 1095 assert_fails('trip.four = 4', 'E1326: Variable "four" not found in object "Triple"')
1319 var b = B.new() 1319 var b = B.new()
1320 b.Foo() 1320 b.Foo()
1321 END 1321 END
1322 v9.CheckSourceFailure(lines, 'E1335: Variable "ro_class_var" in class "A" is not writable', 1) 1322 v9.CheckSourceFailure(lines, 'E1335: Variable "ro_class_var" in class "A" is not writable', 1)
1323 1323
1324 # A private class variable cannot be accessed from a child class 1324 # A protected class variable cannot be accessed from a child class
1325 lines =<< trim END 1325 lines =<< trim END
1326 vim9script 1326 vim9script
1327 class A 1327 class A
1328 static _priv_class_var = 60 1328 static _priv_class_var = 60
1329 endclass 1329 endclass
1335 endclass 1335 endclass
1336 1336
1337 var b = B.new() 1337 var b = B.new()
1338 b.Foo() 1338 b.Foo()
1339 END 1339 END
1340 v9.CheckSourceFailure(lines, 'E1333: Cannot access private variable "_priv_class_var" in class "A"', 1) 1340 v9.CheckSourceFailure(lines, 'E1333: Cannot access protected variable "_priv_class_var" in class "A"', 1)
1341 1341
1342 # A private class variable cannot be modified from a child class 1342 # A protected class variable cannot be modified from a child class
1343 lines =<< trim END 1343 lines =<< trim END
1344 vim9script 1344 vim9script
1345 class A 1345 class A
1346 static _priv_class_var = 60 1346 static _priv_class_var = 60
1347 endclass 1347 endclass
1353 endclass 1353 endclass
1354 1354
1355 var b = B.new() 1355 var b = B.new()
1356 b.Foo() 1356 b.Foo()
1357 END 1357 END
1358 v9.CheckSourceFailure(lines, 'E1333: Cannot access private variable "_priv_class_var" in class "A"', 1) 1358 v9.CheckSourceFailure(lines, 'E1333: Cannot access protected variable "_priv_class_var" in class "A"', 1)
1359 1359
1360 # Access from child class extending a class and from script context 1360 # Access from child class extending a class and from script context
1361 lines =<< trim END 1361 lines =<< trim END
1362 vim9script 1362 vim9script
1363 class A 1363 class A
1534 1534
1535 assert_fails('TextPos.noSuchMember = 2', 'E1337: Class variable "noSuchMember" not found in class "TextPos"') 1535 assert_fails('TextPos.noSuchMember = 2', 'E1337: Class variable "noSuchMember" not found in class "TextPos"')
1536 assert_fails('TextPos.counter = 5', 'E1335: Variable "counter" in class "TextPos" is not writable') 1536 assert_fails('TextPos.counter = 5', 'E1335: Variable "counter" in class "TextPos" is not writable')
1537 assert_fails('TextPos.counter += 5', 'E1335: Variable "counter" in class "TextPos" is not writable') 1537 assert_fails('TextPos.counter += 5', 'E1335: Variable "counter" in class "TextPos" is not writable')
1538 1538
1539 assert_fails('echo TextPos._secret', 'E1333: Cannot access private variable "_secret" in class "TextPos"') 1539 assert_fails('echo TextPos._secret', 'E1333: Cannot access protected variable "_secret" in class "TextPos"')
1540 assert_fails('TextPos._secret = 8', 'E1333: Cannot access private variable "_secret" in class "TextPos"') 1540 assert_fails('TextPos._secret = 8', 'E1333: Cannot access protected variable "_secret" in class "TextPos"')
1541 1541
1542 assert_equal(42, TextPos.anybody) 1542 assert_equal(42, TextPos.anybody)
1543 TextPos.anybody = 12 1543 TextPos.anybody = 12
1544 assert_equal(12, TextPos.anybody) 1544 assert_equal(12, TextPos.anybody)
1545 TextPos.anybody += 5 1545 TextPos.anybody += 5
1581 assert_equal('some text', HTML.MacroSubstitute('some text')) 1581 assert_equal('some text', HTML.MacroSubstitute('some text'))
1582 assert_equal('some text', HTML.MacroSubstitute('some text')) 1582 assert_equal('some text', HTML.MacroSubstitute('some text'))
1583 END 1583 END
1584 v9.CheckSourceSuccess(lines) 1584 v9.CheckSourceSuccess(lines)
1585 1585
1586 # access private member in lambda 1586 # access protected member in lambda
1587 lines =<< trim END 1587 lines =<< trim END
1588 vim9script 1588 vim9script
1589 1589
1590 class Foo 1590 class Foo
1591 this._x: number = 0 1591 this._x: number = 0
1599 var foo = Foo.new() 1599 var foo = Foo.new()
1600 assert_equal(5, foo.Add(5)) 1600 assert_equal(5, foo.Add(5))
1601 END 1601 END
1602 v9.CheckSourceSuccess(lines) 1602 v9.CheckSourceSuccess(lines)
1603 1603
1604 # access private member in lambda body 1604 # access protected member in lambda body
1605 lines =<< trim END 1605 lines =<< trim END
1606 vim9script 1606 vim9script
1607 1607
1608 class Foo 1608 class Foo
1609 this._x: number = 6 1609 this._x: number = 6
1760 endclass 1760 endclass
1761 1761
1762 var o = Child.new() 1762 var o = Child.new()
1763 var x = o._v1 1763 var x = o._v1
1764 END 1764 END
1765 v9.CheckSourceFailure(lines, 'E1333: Cannot access private variable "_v1" in class "Base"', 11) 1765 v9.CheckSourceFailure(lines, 'E1333: Cannot access protected variable "_v1" in class "Base"', 11)
1766 lines =<< trim END 1766 lines =<< trim END
1767 vim9script 1767 vim9script
1768 1768
1769 class Base 1769 class Base
1770 this._v1: list<list<number>> 1770 this._v1: list<list<number>>
1777 var o = Child.new() 1777 var o = Child.new()
1778 var x = o._v1 1778 var x = o._v1
1779 enddef 1779 enddef
1780 F() 1780 F()
1781 END 1781 END
1782 v9.CheckSourceFailure(lines, 'E1333: Cannot access private variable "_v1" in class "Base"', 2) 1782 v9.CheckSourceFailure(lines, 'E1333: Cannot access protected variable "_v1" in class "Base"', 2)
1783 lines =<< trim END 1783 lines =<< trim END
1784 vim9script 1784 vim9script
1785 1785
1786 class Base 1786 class Base
1787 this.v1: list<list<number>> 1787 this.v1: list<list<number>>
1809 o.v1 = [] 1809 o.v1 = []
1810 enddef 1810 enddef
1811 F() 1811 F()
1812 END 1812 END
1813 1813
1814 # Attempt to read a private variable that is in the middle 1814 # Attempt to read a protected variable that is in the middle
1815 # of the class hierarchy. 1815 # of the class hierarchy.
1816 v9.CheckSourceFailure(lines, 'E1335: Variable "v1" in class "Base" is not writable', 2) 1816 v9.CheckSourceFailure(lines, 'E1335: Variable "v1" in class "Base" is not writable', 2)
1817 lines =<< trim END 1817 lines =<< trim END
1818 vim9script 1818 vim9script
1819 1819
1831 var o = Child.new() 1831 var o = Child.new()
1832 var x = o._v1 1832 var x = o._v1
1833 enddef 1833 enddef
1834 F() 1834 F()
1835 END 1835 END
1836 v9.CheckSourceFailure(lines, 'E1333: Cannot access private variable "_v1" in class "Base"', 2) 1836 v9.CheckSourceFailure(lines, 'E1333: Cannot access protected variable "_v1" in class "Base"', 2)
1837 1837
1838 # Attempt to read a private variable that is at the start 1838 # Attempt to read a protected variable that is at the start
1839 # of the class hierarchy. 1839 # of the class hierarchy.
1840 lines =<< trim END 1840 lines =<< trim END
1841 vim9script 1841 vim9script
1842 1842
1843 class Base0 1843 class Base0
1854 var o = Child.new() 1854 var o = Child.new()
1855 var x = o._v1 1855 var x = o._v1
1856 enddef 1856 enddef
1857 F() 1857 F()
1858 END 1858 END
1859 v9.CheckSourceFailure(lines, 'E1333: Cannot access private variable "_v1" in class "Child"', 2) 1859 v9.CheckSourceFailure(lines, 'E1333: Cannot access protected variable "_v1" in class "Child"', 2)
1860 enddef 1860 enddef
1861 1861
1862 func Test_class_garbagecollect() 1862 func Test_class_garbagecollect()
1863 let lines =<< trim END 1863 let lines =<< trim END
1864 vim9script 1864 vim9script
4130 C.new().Lock() 4130 C.new().Lock()
4131 l[0] = 11 4131 l[0] = 11
4132 END 4132 END
4133 v9.CheckSourceFailure(lines, 'E741: Value is locked: l[0] = 11', 11) 4133 v9.CheckSourceFailure(lines, 'E741: Value is locked: l[0] = 11', 11)
4134 4134
4135 # lock a list element referenced by a private object variable 4135 # lock a list element referenced by a protected object variable
4136 # in an object fetched via a script level list 4136 # in an object fetched via a script level list
4137 lines =<< trim END 4137 lines =<< trim END
4138 vim9script 4138 vim9script
4139 4139
4140 class C 4140 class C
4153 l[1] = [33] 4153 l[1] = [33]
4154 END 4154 END
4155 v9.CheckSourceFailure(lines, 'E741: Value is locked: l[1] = [33]', 16) 4155 v9.CheckSourceFailure(lines, 'E741: Value is locked: l[1] = [33]', 16)
4156 4156
4157 # similar to the previous test, except the locking code is executing 4157 # similar to the previous test, except the locking code is executing
4158 # in a class that does not own the private variable. 4158 # in a class that does not own the protected variable.
4159 # Note that the locking code is in a class has a private variable of 4159 # Note that the locking code is in a class has a protected variable of
4160 # the same name. 4160 # the same name.
4161 lines =<< trim END 4161 lines =<< trim END
4162 vim9script 4162 vim9script
4163 4163
4164 class C2 4164 class C2
4177 var lc: list<C> = [ o ] 4177 var lc: list<C> = [ o ]
4178 4178
4179 var o2 = C2.new() 4179 var o2 = C2.new()
4180 o2.Lock(o) 4180 o2.Lock(o)
4181 END 4181 END
4182 v9.CheckSourceFailure(lines, 'E1333: Cannot access private variable "_v1" in class "C"') 4182 v9.CheckSourceFailure(lines, 'E1333: Cannot access protected variable "_v1" in class "C"')
4183 enddef 4183 enddef
4184 4184
4185 " Test builtin islocked() 4185 " Test builtin islocked()
4186 def Test_lockvar_islocked() 4186 def Test_lockvar_islocked()
4187 # Can't lock class/object variable 4187 # Can't lock class/object variable
4501 assert_equal(1, C.SIslocked("l")) 4501 assert_equal(1, C.SIslocked("l"))
4502 END 4502 END
4503 v9.CheckSourceSuccess(lines) 4503 v9.CheckSourceSuccess(lines)
4504 enddef 4504 enddef
4505 4505
4506 " Test for a private object method 4506 " Test for a protected object method
4507 def Test_private_object_method() 4507 def Test_private_object_method()
4508 # Try calling a private method using an object (at the script level) 4508 # Try calling a protected method using an object (at the script level)
4509 var lines =<< trim END 4509 var lines =<< trim END
4510 vim9script 4510 vim9script
4511 4511
4512 class A 4512 class A
4513 def _Foo(): number 4513 def _Foo(): number
4515 enddef 4515 enddef
4516 endclass 4516 endclass
4517 var a = A.new() 4517 var a = A.new()
4518 a._Foo() 4518 a._Foo()
4519 END 4519 END
4520 v9.CheckSourceFailure(lines, 'E1366: Cannot access private method: _Foo', 9) 4520 v9.CheckSourceFailure(lines, 'E1366: Cannot access protected method: _Foo', 9)
4521 4521
4522 # Try calling a private method using an object (from a def function) 4522 # Try calling a protected method using an object (from a def function)
4523 lines =<< trim END 4523 lines =<< trim END
4524 vim9script 4524 vim9script
4525 4525
4526 class A 4526 class A
4527 def _Foo(): number 4527 def _Foo(): number
4532 var a = A.new() 4532 var a = A.new()
4533 a._Foo() 4533 a._Foo()
4534 enddef 4534 enddef
4535 T() 4535 T()
4536 END 4536 END
4537 v9.CheckSourceFailure(lines, 'E1366: Cannot access private method: _Foo()', 2) 4537 v9.CheckSourceFailure(lines, 'E1366: Cannot access protected method: _Foo()', 2)
4538 4538
4539 # Use a private method from another object method (in script context) 4539 # Use a protected method from another object method (in script context)
4540 lines =<< trim END 4540 lines =<< trim END
4541 vim9script 4541 vim9script
4542 4542
4543 class A 4543 class A
4544 def _Foo(): number 4544 def _Foo(): number
4551 var a = A.new() 4551 var a = A.new()
4552 assert_equal(1234, a.Bar()) 4552 assert_equal(1234, a.Bar())
4553 END 4553 END
4554 v9.CheckSourceSuccess(lines) 4554 v9.CheckSourceSuccess(lines)
4555 4555
4556 # Use a private method from another object method (def function context) 4556 # Use a protected method from another object method (def function context)
4557 lines =<< trim END 4557 lines =<< trim END
4558 vim9script 4558 vim9script
4559 4559
4560 class A 4560 class A
4561 def _Foo(): number 4561 def _Foo(): number
4571 enddef 4571 enddef
4572 T() 4572 T()
4573 END 4573 END
4574 v9.CheckSourceSuccess(lines) 4574 v9.CheckSourceSuccess(lines)
4575 4575
4576 # Try calling a private method without the "this" prefix 4576 # Try calling a protected method without the "this" prefix
4577 lines =<< trim END 4577 lines =<< trim END
4578 vim9script 4578 vim9script
4579 4579
4580 class A 4580 class A
4581 def _Foo(): number 4581 def _Foo(): number
4588 var a = A.new() 4588 var a = A.new()
4589 a.Bar() 4589 a.Bar()
4590 END 4590 END
4591 v9.CheckSourceFailure(lines, 'E117: Unknown function: _Foo', 1) 4591 v9.CheckSourceFailure(lines, 'E117: Unknown function: _Foo', 1)
4592 4592
4593 # Try calling a private method using the class name 4593 # Try calling a protected method using the class name
4594 lines =<< trim END 4594 lines =<< trim END
4595 vim9script 4595 vim9script
4596 4596
4597 class A 4597 class A
4598 def _Foo(): number 4598 def _Foo(): number
4599 return 1234 4599 return 1234
4600 enddef 4600 enddef
4601 endclass 4601 endclass
4602 A._Foo() 4602 A._Foo()
4603 END 4603 END
4604 v9.CheckSourceFailure(lines, 'E1366: Cannot access private method: _Foo', 8) 4604 v9.CheckSourceFailure(lines, 'E1366: Cannot access protected method: _Foo', 8)
4605 4605
4606 # Define two private methods with the same name 4606 # Define two protected methods with the same name
4607 lines =<< trim END 4607 lines =<< trim END
4608 vim9script 4608 vim9script
4609 4609
4610 class A 4610 class A
4611 def _Foo() 4611 def _Foo()
4615 endclass 4615 endclass
4616 var a = A.new() 4616 var a = A.new()
4617 END 4617 END
4618 v9.CheckSourceFailure(lines, 'E1355: Duplicate function: _Foo', 7) 4618 v9.CheckSourceFailure(lines, 'E1355: Duplicate function: _Foo', 7)
4619 4619
4620 # Define a private method and a object method with the same name 4620 # Define a protected method and a object method with the same name
4621 lines =<< trim END 4621 lines =<< trim END
4622 vim9script 4622 vim9script
4623 4623
4624 class A 4624 class A
4625 def _Foo() 4625 def _Foo()
4629 endclass 4629 endclass
4630 var a = A.new() 4630 var a = A.new()
4631 END 4631 END
4632 v9.CheckSourceFailure(lines, 'E1355: Duplicate function: Foo', 7) 4632 v9.CheckSourceFailure(lines, 'E1355: Duplicate function: Foo', 7)
4633 4633
4634 # Define an object method and a private method with the same name 4634 # Define an object method and a protected method with the same name
4635 lines =<< trim END 4635 lines =<< trim END
4636 vim9script 4636 vim9script
4637 4637
4638 class A 4638 class A
4639 def Foo() 4639 def Foo()
4643 endclass 4643 endclass
4644 var a = A.new() 4644 var a = A.new()
4645 END 4645 END
4646 v9.CheckSourceFailure(lines, 'E1355: Duplicate function: _Foo', 7) 4646 v9.CheckSourceFailure(lines, 'E1355: Duplicate function: _Foo', 7)
4647 4647
4648 # Call a public method and a private method from a private method 4648 # Call a public method and a protected method from a protected method
4649 lines =<< trim END 4649 lines =<< trim END
4650 vim9script 4650 vim9script
4651 4651
4652 class A 4652 class A
4653 def Foo(): number 4653 def Foo(): number
4667 var a = A.new() 4667 var a = A.new()
4668 a.T() 4668 a.T()
4669 END 4669 END
4670 v9.CheckSourceSuccess(lines) 4670 v9.CheckSourceSuccess(lines)
4671 4671
4672 # Try calling a private method from another class 4672 # Try calling a protected method from another class
4673 lines =<< trim END 4673 lines =<< trim END
4674 vim9script 4674 vim9script
4675 4675
4676 class A 4676 class A
4677 def _Foo(): number 4677 def _Foo(): number
4685 enddef 4685 enddef
4686 endclass 4686 endclass
4687 var b = B.new() 4687 var b = B.new()
4688 b.Foo() 4688 b.Foo()
4689 END 4689 END
4690 v9.CheckSourceFailure(lines, 'E1366: Cannot access private method: _Foo()', 2) 4690 v9.CheckSourceFailure(lines, 'E1366: Cannot access protected method: _Foo()', 2)
4691 4691
4692 # Call a private object method from a child class object method 4692 # Call a protected object method from a child class object method
4693 lines =<< trim END 4693 lines =<< trim END
4694 vim9script 4694 vim9script
4695 class A 4695 class A
4696 def _Foo(): number 4696 def _Foo(): number
4697 return 1234 4697 return 1234
4709 var c = C.new() 4709 var c = C.new()
4710 assert_equal(1234, c.Baz()) 4710 assert_equal(1234, c.Baz())
4711 END 4711 END
4712 v9.CheckSourceSuccess(lines) 4712 v9.CheckSourceSuccess(lines)
4713 4713
4714 # Call a private object method from a child class object 4714 # Call a protected object method from a child class object
4715 lines =<< trim END 4715 lines =<< trim END
4716 vim9script 4716 vim9script
4717 class A 4717 class A
4718 def _Foo(): number 4718 def _Foo(): number
4719 return 1234 4719 return 1234
4728 enddef 4728 enddef
4729 endclass 4729 endclass
4730 var c = C.new() 4730 var c = C.new()
4731 assert_equal(1234, c._Foo()) 4731 assert_equal(1234, c._Foo())
4732 END 4732 END
4733 v9.CheckSourceFailure(lines, 'E1366: Cannot access private method: _Foo', 16) 4733 v9.CheckSourceFailure(lines, 'E1366: Cannot access protected method: _Foo', 16)
4734 4734
4735 # Using "_" prefix in a method name should fail outside of a class 4735 # Using "_" prefix in a method name should fail outside of a class
4736 lines =<< trim END 4736 lines =<< trim END
4737 vim9script 4737 vim9script
4738 def _Foo(): number 4738 def _Foo(): number
4741 var a = _Foo() 4741 var a = _Foo()
4742 END 4742 END
4743 v9.CheckSourceFailure(lines, 'E1267: Function name must start with a capital: _Foo(): number', 2) 4743 v9.CheckSourceFailure(lines, 'E1267: Function name must start with a capital: _Foo(): number', 2)
4744 enddef 4744 enddef
4745 4745
4746 " Test for an private class method 4746 " Test for an protected class method
4747 def Test_private_class_method() 4747 def Test_private_class_method()
4748 # Try calling a class private method (at the script level) 4748 # Try calling a class protected method (at the script level)
4749 var lines =<< trim END 4749 var lines =<< trim END
4750 vim9script 4750 vim9script
4751 4751
4752 class A 4752 class A
4753 static def _Foo(): number 4753 static def _Foo(): number
4754 return 1234 4754 return 1234
4755 enddef 4755 enddef
4756 endclass 4756 endclass
4757 A._Foo() 4757 A._Foo()
4758 END 4758 END
4759 v9.CheckSourceFailure(lines, 'E1366: Cannot access private method: _Foo', 8) 4759 v9.CheckSourceFailure(lines, 'E1366: Cannot access protected method: _Foo', 8)
4760 4760
4761 # Try calling a class private method (from a def function) 4761 # Try calling a class protected method (from a def function)
4762 lines =<< trim END 4762 lines =<< trim END
4763 vim9script 4763 vim9script
4764 4764
4765 class A 4765 class A
4766 static def _Foo(): number 4766 static def _Foo(): number
4770 def T() 4770 def T()
4771 A._Foo() 4771 A._Foo()
4772 enddef 4772 enddef
4773 T() 4773 T()
4774 END 4774 END
4775 v9.CheckSourceFailure(lines, 'E1366: Cannot access private method: _Foo()', 1) 4775 v9.CheckSourceFailure(lines, 'E1366: Cannot access protected method: _Foo()', 1)
4776 4776
4777 # Try calling a class private method using an object (at the script level) 4777 # Try calling a class protected method using an object (at the script level)
4778 lines =<< trim END 4778 lines =<< trim END
4779 vim9script 4779 vim9script
4780 4780
4781 class A 4781 class A
4782 static def _Foo(): number 4782 static def _Foo(): number
4784 enddef 4784 enddef
4785 endclass 4785 endclass
4786 var a = A.new() 4786 var a = A.new()
4787 a._Foo() 4787 a._Foo()
4788 END 4788 END
4789 v9.CheckSourceFailure(lines, 'E1366: Cannot access private method: _Foo', 9) 4789 v9.CheckSourceFailure(lines, 'E1366: Cannot access protected method: _Foo', 9)
4790 4790
4791 # Try calling a class private method using an object (from a def function) 4791 # Try calling a class protected method using an object (from a def function)
4792 lines =<< trim END 4792 lines =<< trim END
4793 vim9script 4793 vim9script
4794 4794
4795 class A 4795 class A
4796 static def _Foo(): number 4796 static def _Foo(): number
4801 var a = A.new() 4801 var a = A.new()
4802 a._Foo() 4802 a._Foo()
4803 enddef 4803 enddef
4804 T() 4804 T()
4805 END 4805 END
4806 v9.CheckSourceFailure(lines, 'E1366: Cannot access private method: _Foo', 2) 4806 v9.CheckSourceFailure(lines, 'E1366: Cannot access protected method: _Foo', 2)
4807 4807
4808 # Use a class private method from an object method 4808 # Use a class protected method from an object method
4809 lines =<< trim END 4809 lines =<< trim END
4810 vim9script 4810 vim9script
4811 4811
4812 class A 4812 class A
4813 static def _Foo(): number 4813 static def _Foo(): number
4820 var a = A.new() 4820 var a = A.new()
4821 a.Bar() 4821 a.Bar()
4822 END 4822 END
4823 v9.CheckSourceSuccess(lines) 4823 v9.CheckSourceSuccess(lines)
4824 4824
4825 # Use a class private method from another class private method without the 4825 # Use a class protected method from another class protected method without the
4826 # class name prefix. 4826 # class name prefix.
4827 lines =<< trim END 4827 lines =<< trim END
4828 vim9script 4828 vim9script
4829 4829
4830 class A 4830 class A
4841 var a = A.new() 4841 var a = A.new()
4842 a.Bar() 4842 a.Bar()
4843 END 4843 END
4844 v9.CheckSourceSuccess(lines) 4844 v9.CheckSourceSuccess(lines)
4845 4845
4846 # Declare a class method and a class private method with the same name 4846 # Declare a class method and a class protected method with the same name
4847 lines =<< trim END 4847 lines =<< trim END
4848 vim9script 4848 vim9script
4849 4849
4850 class A 4850 class A
4851 static def _Foo() 4851 static def _Foo()
4855 endclass 4855 endclass
4856 var a = A.new() 4856 var a = A.new()
4857 END 4857 END
4858 v9.CheckSourceFailure(lines, 'E1355: Duplicate function: Foo', 7) 4858 v9.CheckSourceFailure(lines, 'E1355: Duplicate function: Foo', 7)
4859 4859
4860 # Try calling a class private method from another class 4860 # Try calling a class protected method from another class
4861 lines =<< trim END 4861 lines =<< trim END
4862 vim9script 4862 vim9script
4863 4863
4864 class A 4864 class A
4865 static def _Foo(): number 4865 static def _Foo(): number
4872 enddef 4872 enddef
4873 endclass 4873 endclass
4874 var b = B.new() 4874 var b = B.new()
4875 assert_equal(1234, b.Foo()) 4875 assert_equal(1234, b.Foo())
4876 END 4876 END
4877 v9.CheckSourceFailure(lines, 'E1366: Cannot access private method: _Foo()', 1) 4877 v9.CheckSourceFailure(lines, 'E1366: Cannot access protected method: _Foo()', 1)
4878 4878
4879 # Call a private class method from a child class object method 4879 # Call a protected class method from a child class object method
4880 lines =<< trim END 4880 lines =<< trim END
4881 vim9script 4881 vim9script
4882 class A 4882 class A
4883 static def _Foo(): number 4883 static def _Foo(): number
4884 return 1234 4884 return 1234
4894 enddef 4894 enddef
4895 endclass 4895 endclass
4896 var c = C.new() 4896 var c = C.new()
4897 assert_equal(1234, c.Baz()) 4897 assert_equal(1234, c.Baz())
4898 END 4898 END
4899 v9.CheckSourceFailure(lines, 'E1366: Cannot access private method: _Foo()', 1) 4899 v9.CheckSourceFailure(lines, 'E1366: Cannot access protected method: _Foo()', 1)
4900 4900
4901 # Call a private class method from a child class private class method 4901 # Call a protected class method from a child class protected class method
4902 lines =<< trim END 4902 lines =<< trim END
4903 vim9script 4903 vim9script
4904 class A 4904 class A
4905 static def _Foo(): number 4905 static def _Foo(): number
4906 return 1234 4906 return 1234
4915 return A._Foo() 4915 return A._Foo()
4916 enddef 4916 enddef
4917 endclass 4917 endclass
4918 assert_equal(1234, C.Baz()) 4918 assert_equal(1234, C.Baz())
4919 END 4919 END
4920 v9.CheckSourceFailure(lines, 'E1366: Cannot access private method: _Foo()', 1) 4920 v9.CheckSourceFailure(lines, 'E1366: Cannot access protected method: _Foo()', 1)
4921 4921
4922 # Call a private class method from a child class object 4922 # Call a protected class method from a child class object
4923 lines =<< trim END 4923 lines =<< trim END
4924 vim9script 4924 vim9script
4925 class A 4925 class A
4926 static def _Foo(): number 4926 static def _Foo(): number
4927 return 1234 4927 return 1234
5030 var oc = C.new() 5030 var oc = C.new()
5031 assert_equal(101, oa.AccessObject()) 5031 assert_equal(101, oa.AccessObject())
5032 assert_equal(102, ob.AccessObject()) 5032 assert_equal(102, ob.AccessObject())
5033 assert_equal(103, oc.AccessObject()) 5033 assert_equal(103, oc.AccessObject())
5034 5034
5035 assert_fails('echo oc.AccessPrivateStaticThroughClassName()', 'E1333: Cannot access private variable "_svar" in class "A"') 5035 assert_fails('echo oc.AccessPrivateStaticThroughClassName()', 'E1333: Cannot access protected variable "_svar" in class "A"')
5036 5036
5037 # verify object properly resolves to correct static 5037 # verify object properly resolves to correct static
5038 assert_equal(1, oa.AccessStaticThroughObject()) 5038 assert_equal(1, oa.AccessStaticThroughObject())
5039 assert_equal(1, ob.AccessStaticThroughObject()) 5039 assert_equal(1, ob.AccessStaticThroughObject())
5040 assert_equal(1, oc.AccessStaticThroughObject()) 5040 assert_equal(1, oc.AccessStaticThroughObject())
5052 this.val = 20 5052 this.val = 20
5053 endclass 5053 endclass
5054 END 5054 END
5055 v9.CheckSourceFailure(lines, 'E1369: Duplicate variable: val', 4) 5055 v9.CheckSourceFailure(lines, 'E1369: Duplicate variable: val', 4)
5056 5056
5057 # Duplicate private member variable 5057 # Duplicate protected member variable
5058 lines =<< trim END 5058 lines =<< trim END
5059 vim9script 5059 vim9script
5060 class C 5060 class C
5061 this._val = 10 5061 this._val = 10
5062 this._val = 20 5062 this._val = 20
5072 public this.val = 20 5072 public this.val = 20
5073 endclass 5073 endclass
5074 END 5074 END
5075 v9.CheckSourceFailure(lines, 'E1369: Duplicate variable: val', 4) 5075 v9.CheckSourceFailure(lines, 'E1369: Duplicate variable: val', 4)
5076 5076
5077 # Duplicate private member variable 5077 # Duplicate protected member variable
5078 lines =<< trim END 5078 lines =<< trim END
5079 vim9script 5079 vim9script
5080 class C 5080 class C
5081 this.val = 10 5081 this.val = 10
5082 this._val = 20 5082 this._val = 20
5083 endclass 5083 endclass
5084 END 5084 END
5085 v9.CheckSourceFailure(lines, 'E1369: Duplicate variable: _val', 4) 5085 v9.CheckSourceFailure(lines, 'E1369: Duplicate variable: _val', 4)
5086 5086
5087 # Duplicate public and private member variable 5087 # Duplicate public and protected member variable
5088 lines =<< trim END 5088 lines =<< trim END
5089 vim9script 5089 vim9script
5090 class C 5090 class C
5091 this._val = 20 5091 this._val = 20
5092 public this.val = 10 5092 public this.val = 10
5102 static _s: string = "def" 5102 static _s: string = "def"
5103 endclass 5103 endclass
5104 END 5104 END
5105 v9.CheckSourceFailure(lines, 'E1369: Duplicate variable: _s', 4) 5105 v9.CheckSourceFailure(lines, 'E1369: Duplicate variable: _s', 4)
5106 5106
5107 # Duplicate public and private class member variable 5107 # Duplicate public and protected class member variable
5108 lines =<< trim END 5108 lines =<< trim END
5109 vim9script 5109 vim9script
5110 class C 5110 class C
5111 public static s: string = "abc" 5111 public static s: string = "abc"
5112 static _s: string = "def" 5112 static _s: string = "def"
5141 this.val = 20 5141 this.val = 20
5142 endclass 5142 endclass
5143 END 5143 END
5144 v9.CheckSourceFailure(lines, 'E1369: Duplicate variable: val', 9) 5144 v9.CheckSourceFailure(lines, 'E1369: Duplicate variable: val', 9)
5145 5145
5146 # Duplicate object private member variable in a derived class 5146 # Duplicate object protected member variable in a derived class
5147 lines =<< trim END 5147 lines =<< trim END
5148 vim9script 5148 vim9script
5149 class A 5149 class A
5150 this._val = 10 5150 this._val = 10
5151 endclass 5151 endclass
5155 this._val = 20 5155 this._val = 20
5156 endclass 5156 endclass
5157 END 5157 END
5158 v9.CheckSourceFailure(lines, 'E1369: Duplicate variable: _val', 9) 5158 v9.CheckSourceFailure(lines, 'E1369: Duplicate variable: _val', 9)
5159 5159
5160 # Duplicate object private member variable in a derived class 5160 # Duplicate object protected member variable in a derived class
5161 lines =<< trim END 5161 lines =<< trim END
5162 vim9script 5162 vim9script
5163 class A 5163 class A
5164 this.val = 10 5164 this.val = 10
5165 endclass 5165 endclass
5194 endclass 5194 endclass
5195 END 5195 END
5196 v9.CheckSourceSuccess(lines) 5196 v9.CheckSourceSuccess(lines)
5197 enddef 5197 enddef
5198 5198
5199 " Test for accessing a private member outside a class in a def function 5199 " Test for accessing a protected member outside a class in a def function
5200 def Test_private_member_access_outside_class() 5200 def Test_private_member_access_outside_class()
5201 # private object member variable 5201 # protected object member variable
5202 var lines =<< trim END 5202 var lines =<< trim END
5203 vim9script 5203 vim9script
5204 class A 5204 class A
5205 this._val = 10 5205 this._val = 10
5206 def GetVal(): number 5206 def GetVal(): number
5211 var a = A.new() 5211 var a = A.new()
5212 a._val = 20 5212 a._val = 20
5213 enddef 5213 enddef
5214 T() 5214 T()
5215 END 5215 END
5216 v9.CheckSourceFailure(lines, 'E1333: Cannot access private variable "_val" in class "A"', 2) 5216 v9.CheckSourceFailure(lines, 'E1333: Cannot access protected variable "_val" in class "A"', 2)
5217 5217
5218 # access a non-existing private object member variable 5218 # access a non-existing protected object member variable
5219 lines =<< trim END 5219 lines =<< trim END
5220 vim9script 5220 vim9script
5221 class A 5221 class A
5222 this._val = 10 5222 this._val = 10
5223 endclass 5223 endclass
5227 enddef 5227 enddef
5228 T() 5228 T()
5229 END 5229 END
5230 v9.CheckSourceFailure(lines, 'E1326: Variable "_a" not found in object "A"', 2) 5230 v9.CheckSourceFailure(lines, 'E1326: Variable "_a" not found in object "A"', 2)
5231 5231
5232 # private static member variable 5232 # protected static member variable
5233 lines =<< trim END 5233 lines =<< trim END
5234 vim9script 5234 vim9script
5235 class A 5235 class A
5236 static _val = 10 5236 static _val = 10
5237 endclass 5237 endclass
5241 enddef 5241 enddef
5242 T() 5242 T()
5243 END 5243 END
5244 v9.CheckSourceFailure(lines, 'E1375: Class variable "_val" accessible only using class "A"', 2) 5244 v9.CheckSourceFailure(lines, 'E1375: Class variable "_val" accessible only using class "A"', 2)
5245 5245
5246 # private static member variable 5246 # protected static member variable
5247 lines =<< trim END 5247 lines =<< trim END
5248 vim9script 5248 vim9script
5249 class A 5249 class A
5250 static _val = 10 5250 static _val = 10
5251 endclass 5251 endclass
5255 enddef 5255 enddef
5256 T() 5256 T()
5257 END 5257 END
5258 v9.CheckSourceFailure(lines, 'E1375: Class variable "_val" accessible only using class "A"', 2) 5258 v9.CheckSourceFailure(lines, 'E1375: Class variable "_val" accessible only using class "A"', 2)
5259 5259
5260 # private static class variable 5260 # protected static class variable
5261 lines =<< trim END 5261 lines =<< trim END
5262 vim9script 5262 vim9script
5263 class A 5263 class A
5264 static _val = 10 5264 static _val = 10
5265 endclass 5265 endclass
5266 def T() 5266 def T()
5267 var x = A._val 5267 var x = A._val
5268 enddef 5268 enddef
5269 T() 5269 T()
5270 END 5270 END
5271 v9.CheckSourceFailure(lines, 'E1333: Cannot access private variable "_val" in class "A"', 1) 5271 v9.CheckSourceFailure(lines, 'E1333: Cannot access protected variable "_val" in class "A"', 1)
5272 5272
5273 # private static class variable 5273 # protected static class variable
5274 lines =<< trim END 5274 lines =<< trim END
5275 vim9script 5275 vim9script
5276 class A 5276 class A
5277 static _val = 10 5277 static _val = 10
5278 endclass 5278 endclass
5279 def T() 5279 def T()
5280 A._val = 3 5280 A._val = 3
5281 enddef 5281 enddef
5282 T() 5282 T()
5283 END 5283 END
5284 v9.CheckSourceFailure(lines, 'E1333: Cannot access private variable "_val" in class "A"', 1) 5284 v9.CheckSourceFailure(lines, 'E1333: Cannot access protected variable "_val" in class "A"', 1)
5285 enddef 5285 enddef
5286 5286
5287 " Test for changing the member access of an interface in a implementation class 5287 " Test for changing the member access of an interface in a implementation class
5288 def Test_change_interface_member_access() 5288 def Test_change_interface_member_access()
5289 var lines =<< trim END 5289 var lines =<< trim END
5340 assert_equal({a: 1, b: 2}, A.var3) 5340 assert_equal({a: 1, b: 2}, A.var3)
5341 A.var2 = [3, 4] 5341 A.var2 = [3, 4]
5342 A.var3 = {c: 3, d: 4} 5342 A.var3 = {c: 3, d: 4}
5343 assert_equal([3, 4], A.var2) 5343 assert_equal([3, 4], A.var2)
5344 assert_equal({c: 3, d: 4}, A.var3) 5344 assert_equal({c: 3, d: 4}, A.var3)
5345 assert_fails('echo A._priv_var4', 'E1333: Cannot access private variable "_priv_var4" in class "A"') 5345 assert_fails('echo A._priv_var4', 'E1333: Cannot access protected variable "_priv_var4" in class "A"')
5346 enddef 5346 enddef
5347 T() 5347 T()
5348 END 5348 END
5349 v9.CheckSourceSuccess(lines) 5349 v9.CheckSourceSuccess(lines)
5350 enddef 5350 enddef
6033 enddef 6033 enddef
6034 endclass 6034 endclass
6035 END 6035 END
6036 v9.CheckSourceFailure(lines, 'E1355: Duplicate function: Foo', 6) 6036 v9.CheckSourceFailure(lines, 'E1355: Duplicate function: Foo', 6)
6037 6037
6038 # Duplicate private instance method 6038 # Duplicate protected instance method
6039 lines =<< trim END 6039 lines =<< trim END
6040 vim9script 6040 vim9script
6041 class A 6041 class A
6042 static def Foo() 6042 static def Foo()
6043 enddef 6043 enddef
6057 enddef 6057 enddef
6058 endclass 6058 endclass
6059 END 6059 END
6060 v9.CheckSourceFailure(lines, 'E1355: Duplicate function: Foo', 6) 6060 v9.CheckSourceFailure(lines, 'E1355: Duplicate function: Foo', 6)
6061 6061
6062 # Duplicate private class method 6062 # Duplicate protected class method
6063 lines =<< trim END 6063 lines =<< trim END
6064 vim9script 6064 vim9script
6065 class A 6065 class A
6066 def Foo() 6066 def Foo()
6067 enddef 6067 enddef
6069 enddef 6069 enddef
6070 endclass 6070 endclass
6071 END 6071 END
6072 v9.CheckSourceFailure(lines, 'E1355: Duplicate function: _Foo', 6) 6072 v9.CheckSourceFailure(lines, 'E1355: Duplicate function: _Foo', 6)
6073 6073
6074 # Duplicate private class and object method 6074 # Duplicate protected class and object method
6075 lines =<< trim END 6075 lines =<< trim END
6076 vim9script 6076 vim9script
6077 class A 6077 class A
6078 def _Foo() 6078 def _Foo()
6079 enddef 6079 enddef
6085 enddef 6085 enddef
6086 6086
6087 " Test for an instance method access level comparison with parent instance 6087 " Test for an instance method access level comparison with parent instance
6088 " methods. 6088 " methods.
6089 def Test_instance_method_access_level() 6089 def Test_instance_method_access_level()
6090 # Private method in subclass 6090 # protected method in subclass
6091 var lines =<< trim END 6091 var lines =<< trim END
6092 vim9script 6092 vim9script
6093 class A 6093 class A
6094 def Foo() 6094 def Foo()
6095 enddef 6095 enddef
6145 END 6145 END
6146 v9.CheckSourceSuccess(lines) 6146 v9.CheckSourceSuccess(lines)
6147 enddef 6147 enddef
6148 6148
6149 " A interface cannot have a static variable or a static method or a private 6149 " A interface cannot have a static variable or a static method or a private
6150 " variable or a private method or a public variable 6150 " variable or a protected method or a public variable
6151 def Test_interface_with_unsupported_members() 6151 def Test_interface_with_unsupported_members()
6152 var lines =<< trim END 6152 var lines =<< trim END
6153 vim9script 6153 vim9script
6154 interface A 6154 interface A
6155 static num: number 6155 static num: number
6209 vim9script 6209 vim9script
6210 interface A 6210 interface A
6211 this._Foo: list<string> 6211 this._Foo: list<string>
6212 endinterface 6212 endinterface
6213 END 6213 END
6214 v9.CheckSourceFailure(lines, 'E1379: Private variable not supported in an interface', 3) 6214 v9.CheckSourceFailure(lines, 'E1379: Protected variable not supported in an interface', 3)
6215 6215
6216 lines =<< trim END 6216 lines =<< trim END
6217 vim9script 6217 vim9script
6218 interface A 6218 interface A
6219 def _Foo(d: dict<any>): list<string> 6219 def _Foo(d: dict<any>): list<string>
6220 endinterface 6220 endinterface
6221 END 6221 END
6222 v9.CheckSourceFailure(lines, 'E1380: Private method not supported in an interface', 3) 6222 v9.CheckSourceFailure(lines, 'E1380: Protected method not supported in an interface', 3)
6223 enddef 6223 enddef
6224 6224
6225 " Test for extending an interface 6225 " Test for extending an interface
6226 def Test_extend_interface() 6226 def Test_extend_interface()
6227 var lines =<< trim END 6227 var lines =<< trim END
7651 const math = Math.new() 7651 const math = Math.new()
7652 assert_equal(48, Map(math.Double)(24)) 7652 assert_equal(48, Map(math.Double)(24))
7653 END 7653 END
7654 v9.CheckSourceSuccess(lines) 7654 v9.CheckSourceSuccess(lines)
7655 7655
7656 # Try using a private object method funcref from a def function 7656 # Try using a protected object method funcref from a def function
7657 lines =<< trim END 7657 lines =<< trim END
7658 vim9script 7658 vim9script
7659 class A 7659 class A
7660 def _Foo() 7660 def _Foo()
7661 enddef 7661 enddef
7664 var a = A.new() 7664 var a = A.new()
7665 var Fn = a._Foo 7665 var Fn = a._Foo
7666 enddef 7666 enddef
7667 Bar() 7667 Bar()
7668 END 7668 END
7669 v9.CheckSourceFailure(lines, 'E1366: Cannot access private method: _Foo', 2) 7669 v9.CheckSourceFailure(lines, 'E1366: Cannot access protected method: _Foo', 2)
7670 7670
7671 # Try using a private object method funcref at the script level 7671 # Try using a protected object method funcref at the script level
7672 lines =<< trim END 7672 lines =<< trim END
7673 vim9script 7673 vim9script
7674 class A 7674 class A
7675 def _Foo() 7675 def _Foo()
7676 enddef 7676 enddef
7677 endclass 7677 endclass
7678 var a = A.new() 7678 var a = A.new()
7679 var Fn = a._Foo 7679 var Fn = a._Foo
7680 END 7680 END
7681 v9.CheckSourceFailure(lines, 'E1366: Cannot access private method: _Foo', 7) 7681 v9.CheckSourceFailure(lines, 'E1366: Cannot access protected method: _Foo', 7)
7682 7682
7683 # Using a private object method funcref from another object method 7683 # Using a protected object method funcref from another object method
7684 lines =<< trim END 7684 lines =<< trim END
7685 vim9script 7685 vim9script
7686 class A 7686 class A
7687 def _Foo(): list<number> 7687 def _Foo(): list<number>
7688 return [3, 2, 1] 7688 return [3, 2, 1]
7810 7810
7811 assert_equal(48, Map(Math.StaticDouble)(24)) 7811 assert_equal(48, Map(Math.StaticDouble)(24))
7812 END 7812 END
7813 v9.CheckSourceSuccess(lines) 7813 v9.CheckSourceSuccess(lines)
7814 7814
7815 # Try using a private class method funcref in a def function 7815 # Try using a protected class method funcref in a def function
7816 lines =<< trim END 7816 lines =<< trim END
7817 vim9script 7817 vim9script
7818 class A 7818 class A
7819 static def _Foo() 7819 static def _Foo()
7820 enddef 7820 enddef
7822 def Bar() 7822 def Bar()
7823 var Fn = A._Foo 7823 var Fn = A._Foo
7824 enddef 7824 enddef
7825 Bar() 7825 Bar()
7826 END 7826 END
7827 v9.CheckSourceFailure(lines, 'E1366: Cannot access private method: _Foo', 1) 7827 v9.CheckSourceFailure(lines, 'E1366: Cannot access protected method: _Foo', 1)
7828 7828
7829 # Try using a private class method funcref at script level 7829 # Try using a protected class method funcref at script level
7830 lines =<< trim END 7830 lines =<< trim END
7831 vim9script 7831 vim9script
7832 class A 7832 class A
7833 static def _Foo() 7833 static def _Foo()
7834 enddef 7834 enddef
7835 endclass 7835 endclass
7836 var Fn = A._Foo 7836 var Fn = A._Foo
7837 END 7837 END
7838 v9.CheckSourceFailure(lines, 'E1366: Cannot access private method: _Foo', 6) 7838 v9.CheckSourceFailure(lines, 'E1366: Cannot access protected method: _Foo', 6)
7839 7839
7840 # Using a private class method funcref from another class method 7840 # Using a protected class method funcref from another class method
7841 lines =<< trim END 7841 lines =<< trim END
7842 vim9script 7842 vim9script
7843 class A 7843 class A
7844 static def _Foo(): list<number> 7844 static def _Foo(): list<number>
7845 return [3, 2, 1] 7845 return [3, 2, 1]