patch 9.0.2029: Vim9: no support for partials using call()
Problem: Vim9: no support for partials using call()
Solution: Add support
closes: #13341
Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: Yegappan Lakshmanan <yegappan@yahoo.com>
diff --git a/src/testdir/test_vim9_class.vim b/src/testdir/test_vim9_class.vim
index 3af9a1f..b9f2910 100644
--- a/src/testdir/test_vim9_class.vim
+++ b/src/testdir/test_vim9_class.vim
@@ -7510,6 +7510,21 @@
END
v9.CheckSourceSuccess(lines)
+ # Using object method funcref at the script level
+ lines =<< trim END
+ vim9script
+ class A
+ this.val: number
+ def Foo(): number
+ return this.val
+ enddef
+ endclass
+ var a = A.new(345)
+ var Fn = a.Foo
+ assert_equal(345, Fn())
+ END
+ v9.CheckSourceSuccess(lines)
+
# Using object method funcref from another object method
lines =<< trim END
vim9script
@@ -7604,6 +7619,26 @@
a.Bar()
END
v9.CheckSourceSuccess(lines)
+
+ # Using object method funcref using call()
+ lines =<< trim END
+ vim9script
+ class A
+ this.val: number
+ def Foo(): number
+ return this.val
+ enddef
+ endclass
+
+ def Bar(obj: A)
+ assert_equal(123, call(obj.Foo, []))
+ enddef
+
+ var a = A.new(123)
+ Bar(a)
+ assert_equal(123, call(a.Foo, []))
+ END
+ v9.CheckSourceSuccess(lines)
enddef
" Test for using a class method as a funcref
@@ -7637,6 +7672,21 @@
END
v9.CheckSourceSuccess(lines)
+ # Using class method funcref at the script level
+ lines =<< trim END
+ vim9script
+ class A
+ public static val: number
+ static def Foo(): number
+ return val
+ enddef
+ endclass
+ A.val = 567
+ var Fn = A.Foo
+ assert_equal(567, Fn())
+ END
+ v9.CheckSourceSuccess(lines)
+
# Using function() to get a class method funcref
lines =<< trim END
vim9script
@@ -7725,6 +7775,25 @@
A.Bar()
END
v9.CheckSourceSuccess(lines)
+
+ # Using class method funcref using call()
+ lines =<< trim END
+ vim9script
+ class A
+ public static val: number
+ static def Foo(): number
+ return val
+ enddef
+ endclass
+
+ def Bar()
+ A.val = 468
+ assert_equal(468, call(A.Foo, []))
+ enddef
+ Bar()
+ assert_equal(468, call(A.Foo, []))
+ END
+ v9.CheckSourceSuccess(lines)
enddef
" Test for using an object member as a funcref