mirror of
https://github.com/vim/vim.git
synced 2025-09-25 03:54:15 -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:
committed by
Christian Brabandt
parent
df4b3ca5dc
commit
b0206e9fb5
@@ -819,6 +819,8 @@ deref_function_name(
|
|||||||
typval_T ref;
|
typval_T ref;
|
||||||
char_u *name = *arg;
|
char_u *name = *arg;
|
||||||
int save_flags = 0;
|
int save_flags = 0;
|
||||||
|
int evaluate = evalarg != NULL
|
||||||
|
&& (evalarg->eval_flags & EVAL_EVALUATE);
|
||||||
|
|
||||||
ref.v_type = VAR_UNKNOWN;
|
ref.v_type = VAR_UNKNOWN;
|
||||||
if (evalarg != NULL)
|
if (evalarg != NULL)
|
||||||
@@ -867,7 +869,7 @@ deref_function_name(
|
|||||||
*tofree = name;
|
*tofree = name;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else if (evaluate)
|
||||||
{
|
{
|
||||||
if (verbose)
|
if (verbose)
|
||||||
semsg(_(e_not_callable_type_str), name);
|
semsg(_(e_not_callable_type_str), name);
|
||||||
|
@@ -11657,4 +11657,46 @@ def Test_mapnew_with_instance_method()
|
|||||||
v9.CheckSourceSuccess(lines)
|
v9.CheckSourceSuccess(lines)
|
||||||
enddef
|
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
|
" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker
|
||||||
|
@@ -704,6 +704,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
975,
|
||||||
/**/
|
/**/
|
||||||
974,
|
974,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user