patch 9.1.0975: Vim9: interpolated string expr not working in object methods
Problem: Vim9: interpolated string expr not working in object methods
(Igbanam Ogbuluijah)
Solution: Check the evalarg argument (Yegappan Lakshmanan)
fixes: #16317
closes: #16342
Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/src/eval.c b/src/eval.c
index f4f8c05..306cfe7 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -819,6 +819,8 @@
typval_T ref;
char_u *name = *arg;
int save_flags = 0;
+ int evaluate = evalarg != NULL
+ && (evalarg->eval_flags & EVAL_EVALUATE);
ref.v_type = VAR_UNKNOWN;
if (evalarg != NULL)
@@ -867,7 +869,7 @@
*tofree = name;
}
}
- else
+ else if (evaluate)
{
if (verbose)
semsg(_(e_not_callable_type_str), name);
diff --git a/src/testdir/test_vim9_class.vim b/src/testdir/test_vim9_class.vim
index 75f1b50..309898b 100644
--- a/src/testdir/test_vim9_class.vim
+++ b/src/testdir/test_vim9_class.vim
@@ -11657,4 +11657,46 @@
v9.CheckSourceSuccess(lines)
enddef
+" Test for using an object method in a method call.
+def Test_use_object_method_in_a_method_call()
+ var lines =<< trim END
+ vim9script
+
+ class Foo
+ def Cost(nums: list<number>): number
+ return nums[0] * nums[1]
+ enddef
+
+ def ShowCost(): string
+ var g = [4, 5]
+ return $"Cost is: {g->this.Cost()}"
+ enddef
+ endclass
+
+ var d = Foo.new()
+ assert_equal('Cost is: 20', d.ShowCost())
+ END
+ v9.CheckSourceSuccess(lines)
+
+ # Test for using a non-existing object method in string interpolation
+ lines =<< trim END
+ vim9script
+
+ class Foo
+ def Cost(nums: list<number>): number
+ return nums[0] * nums[1]
+ enddef
+
+ def ShowCost(): string
+ var g = [4, 5]
+ echo $"Cost is: {g->this.NewCost()}"
+ enddef
+ endclass
+
+ var d = Foo.new()
+ d.ShowCost()
+ END
+ v9.CheckSourceFailure(lines, 'E1326: Variable "NewCost" not found in object "Foo"')
+enddef
+
" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker
diff --git a/src/version.c b/src/version.c
index 3e3d9b2..ca353c2 100644
--- a/src/version.c
+++ b/src/version.c
@@ -705,6 +705,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 975,
+/**/
974,
/**/
973,