summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/eval.c46
-rw-r--r--src/testdir/test_partial.vim14
-rw-r--r--src/version.c2
3 files changed, 59 insertions, 3 deletions
diff --git a/src/eval.c b/src/eval.c
index 5f20c238f..a5c015d6a 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -7897,9 +7897,49 @@ tv2string(
*tofree = string_quote(tv->vval.v_string, TRUE);
return *tofree;
case VAR_PARTIAL:
- *tofree = string_quote(tv->vval.v_partial == NULL ? NULL
- : tv->vval.v_partial->pt_name, TRUE);
- return *tofree;
+ {
+ partial_T *pt = tv->vval.v_partial;
+ char_u *fname = string_quote(pt == NULL ? NULL
+ : pt->pt_name, FALSE);
+ garray_T ga;
+ int i;
+ char_u *tf;
+
+ ga_init2(&ga, 1, 100);
+ ga_concat(&ga, (char_u *)"function(");
+ if (fname != NULL)
+ {
+ ga_concat(&ga, fname);
+ vim_free(fname);
+ }
+ if (pt != NULL && pt->pt_argc > 0)
+ {
+ ga_concat(&ga, (char_u *)", [");
+ for (i = 0; i < pt->pt_argc; ++i)
+ {
+ if (i > 0)
+ ga_concat(&ga, (char_u *)", ");
+ ga_concat(&ga,
+ tv2string(&pt->pt_argv[i], &tf, numbuf, copyID));
+ vim_free(tf);
+ }
+ ga_concat(&ga, (char_u *)"]");
+ }
+ if (pt != NULL && pt->pt_dict != NULL)
+ {
+ typval_T dtv;
+
+ ga_concat(&ga, (char_u *)", ");
+ dtv.v_type = VAR_DICT;
+ dtv.vval.v_dict = pt->pt_dict;
+ ga_concat(&ga, tv2string(&dtv, &tf, numbuf, copyID));
+ vim_free(tf);
+ }
+ ga_concat(&ga, (char_u *)")");
+
+ *tofree = ga.ga_data;
+ return *tofree;
+ }
case VAR_STRING:
*tofree = string_quote(tv->vval.v_string, FALSE);
return *tofree;
diff --git a/src/testdir/test_partial.vim b/src/testdir/test_partial.vim
index fa07866a1..3764f221f 100644
--- a/src/testdir/test_partial.vim
+++ b/src/testdir/test_partial.vim
@@ -156,3 +156,17 @@ func Test_partial_exists()
let lF = [F]
call assert_true(exists('*lF[0]'))
endfunc
+
+func Test_partial_string()
+ let F = function('MyFunc')
+ call assert_equal("function('MyFunc')", string(F))
+ let F = function('MyFunc', ['foo'])
+ call assert_equal("function('MyFunc', ['foo'])", string(F))
+ let F = function('MyFunc', ['foo', 'bar'])
+ call assert_equal("function('MyFunc', ['foo', 'bar'])", string(F))
+ let d = {'one': 1}
+ let F = function('MyFunc', d)
+ call assert_equal("function('MyFunc', {'one': 1})", string(F))
+ let F = function('MyFunc', ['foo'], d)
+ call assert_equal("function('MyFunc', ['foo'], {'one': 1})", string(F))
+endfunc
diff --git a/src/version.c b/src/version.c
index 16bb976cf..965af65da 100644
--- a/src/version.c
+++ b/src/version.c
@@ -749,6 +749,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1608,
+/**/
1607,
/**/
1606,