@@ -7897,9 +7897,49 @@ tv2string(
78977897 *tofree = string_quote(tv->vval.v_string, TRUE);
78987898 return *tofree;
78997899 case VAR_PARTIAL:
7900- *tofree = string_quote(tv->vval.v_partial == NULL ? NULL
7901- : tv->vval.v_partial->pt_name, TRUE);
7902- return *tofree;
7900+ {
7901+ partial_T *pt = tv->vval.v_partial;
7902+ char_u *fname = string_quote(pt == NULL ? NULL
7903+ : pt->pt_name, FALSE);
7904+ garray_T ga;
7905+ int i;
7906+ char_u *tf;
7907+
7908+ ga_init2(&ga, 1, 100);
7909+ ga_concat(&ga, (char_u *)"function(");
7910+ if (fname != NULL)
7911+ {
7912+ ga_concat(&ga, fname);
7913+ vim_free(fname);
7914+ }
7915+ if (pt != NULL && pt->pt_argc > 0)
7916+ {
7917+ ga_concat(&ga, (char_u *)", [");
7918+ for (i = 0; i < pt->pt_argc; ++i)
7919+ {
7920+ if (i > 0)
7921+ ga_concat(&ga, (char_u *)", ");
7922+ ga_concat(&ga,
7923+ tv2string(&pt->pt_argv[i], &tf, numbuf, copyID));
7924+ vim_free(tf);
7925+ }
7926+ ga_concat(&ga, (char_u *)"]");
7927+ }
7928+ if (pt != NULL && pt->pt_dict != NULL)
7929+ {
7930+ typval_T dtv;
7931+
7932+ ga_concat(&ga, (char_u *)", ");
7933+ dtv.v_type = VAR_DICT;
7934+ dtv.vval.v_dict = pt->pt_dict;
7935+ ga_concat(&ga, tv2string(&dtv, &tf, numbuf, copyID));
7936+ vim_free(tf);
7937+ }
7938+ ga_concat(&ga, (char_u *)")");
7939+
7940+ *tofree = ga.ga_data;
7941+ return *tofree;
7942+ }
79037943 case VAR_STRING:
79047944 *tofree = string_quote(tv->vval.v_string, FALSE);
79057945 return *tofree;
0 commit comments