mirror of
https://github.com/vim/vim.git
synced 2025-10-02 05:04:20 -04:00
patch 9.1.0542: Vim9: confusing string() output for object functions
Problem: Vim9: confusing string() output for object functions Solution: improve the output for object functions (Ernie Rael) fixes: #15129 closes: #15143 Signed-off-by: Ernie Rael <errael@raelity.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
committed by
Christian Brabandt
parent
52123879c0
commit
9d779c514f
35
src/eval.c
35
src/eval.c
@@ -5922,6 +5922,37 @@ func_tv2string(typval_T *tv, char_u **tofree, int echo_style)
|
||||
return r;
|
||||
}
|
||||
|
||||
/*
|
||||
* Return a textual representation of the object method in "tv", a VAR_PARTIAL.
|
||||
* If the memory is allocated "tofree" is set to it, otherwise NULL.
|
||||
* When "echo_style" is FALSE, put quotes around the function name as
|
||||
* "function()", otherwise does not put quotes around function name.
|
||||
* May return NULL.
|
||||
*/
|
||||
static char_u *
|
||||
method_tv2string(typval_T *tv, char_u **tofree, int echo_style)
|
||||
{
|
||||
char_u buf[MAX_FUNC_NAME_LEN];
|
||||
partial_T *pt = tv->vval.v_partial;
|
||||
|
||||
size_t len = vim_snprintf((char *)buf, sizeof(buf), "<SNR>%d_%s.%s",
|
||||
pt->pt_func->uf_script_ctx.sc_sid,
|
||||
pt->pt_func->uf_class->class_name,
|
||||
pt->pt_func->uf_name);
|
||||
if (len >= sizeof(buf))
|
||||
{
|
||||
if (echo_style)
|
||||
{
|
||||
*tofree = NULL;
|
||||
return (char_u *)"function()";
|
||||
}
|
||||
else
|
||||
return *tofree = string_quote((char_u*)"", TRUE);
|
||||
}
|
||||
|
||||
return *tofree = echo_style ? vim_strsave(buf) : string_quote(buf, TRUE);
|
||||
}
|
||||
|
||||
/*
|
||||
* Return a textual representation of a partial in "tv".
|
||||
* If the memory is allocated "tofree" is set to it, otherwise NULL.
|
||||
@@ -6241,7 +6272,11 @@ echo_string_core(
|
||||
break;
|
||||
|
||||
case VAR_PARTIAL:
|
||||
if (tv->vval.v_partial == NULL
|
||||
|| tv->vval.v_partial->pt_obj == NULL)
|
||||
r = partial_tv2string(tv, tofree, numbuf, copyID);
|
||||
else
|
||||
r = method_tv2string(tv, tofree, echo_style);
|
||||
break;
|
||||
|
||||
case VAR_BLOB:
|
||||
|
@@ -10466,6 +10466,20 @@ func Test_object_string()
|
||||
call v9.CheckSourceSuccess(lines)
|
||||
endfunc
|
||||
|
||||
" Test for using the string() builtin method with an object's method
|
||||
def Test_method_string()
|
||||
var lines =<< trim END
|
||||
vim9script
|
||||
class A
|
||||
def F()
|
||||
enddef
|
||||
endclass
|
||||
assert_match('function(''<SNR>\d\+_A\.F'')', string(A.new().F))
|
||||
END
|
||||
v9.CheckScriptSuccess(lines)
|
||||
enddef
|
||||
|
||||
|
||||
" Test for using a class in the class definition
|
||||
def Test_Ref_Class_Within_Same_Class()
|
||||
var lines =<< trim END
|
||||
|
@@ -704,6 +704,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
542,
|
||||
/**/
|
||||
541,
|
||||
/**/
|
||||
|
Reference in New Issue
Block a user