0
0
mirror of https://github.com/vim/vim.git synced 2025-09-24 03:44:06 -04:00

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>
This commit is contained in:
Yegappan Lakshmanan
2024-12-30 09:52:16 +01:00
committed by Christian Brabandt
parent df4b3ca5dc
commit b0206e9fb5
3 changed files with 47 additions and 1 deletions

View File

@@ -819,6 +819,8 @@ deref_function_name(
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 @@ deref_function_name(
*tofree = name;
}
}
else
else if (evaluate)
{
if (verbose)
semsg(_(e_not_callable_type_str), name);

View File

@@ -11657,4 +11657,46 @@ def Test_mapnew_with_instance_method()
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

View File

@@ -704,6 +704,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
975,
/**/
974,
/**/