summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2021-12-09 16:40:18 +0000
committerBram Moolenaar <Bram@vim.org>2021-12-09 16:40:18 +0000
commitc4ec338fb80ebfb5d631f0718fdd1a1c04d9ed82 (patch)
tree7d7f953f0a5a9de830e4a972f08d92fdf25be4ef
parentdcb53be4418fe263a71c7738315241031df6c986 (diff)
patch 8.2.3766: converting a funcref to a string leaves out "g:"v8.2.3766
Problem: Converting a funcref to a string leaves out "g:", causing the meaning of the name depending on the context. Solution: Prepend "g:" for a global function.
-rw-r--r--src/eval.c10
-rw-r--r--src/testdir/test_functions.vim5
-rw-r--r--src/version.c2
3 files changed, 16 insertions, 1 deletions
diff --git a/src/eval.c b/src/eval.c
index bc4db2906c..1e2e4c4768 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -5006,7 +5006,15 @@ echo_string_core(
ga_concat(&ga, (char_u *)"function(");
if (fname != NULL)
{
- ga_concat(&ga, fname);
+ // When using uf_name prepend "g:" for a global function.
+ if (pt->pt_name == NULL && fname[0] == '\''
+ && vim_isupper(fname[1]))
+ {
+ ga_concat(&ga, (char_u *)"'g:");
+ ga_concat(&ga, fname + 1);
+ }
+ else
+ ga_concat(&ga, fname);
vim_free(fname);
}
if (pt != NULL && pt->pt_argc > 0)
diff --git a/src/testdir/test_functions.vim b/src/testdir/test_functions.vim
index ac9bb4cfab..a215667964 100644
--- a/src/testdir/test_functions.vim
+++ b/src/testdir/test_functions.vim
@@ -2771,5 +2771,10 @@ func Test_builtin_check()
call assert_fails('call extend(g:, #{bar: { -> "foo" }}, "force")', 'E704:')
endfunc
+func Test_funcref_to_string()
+ let Fn = funcref('g:Test_funcref_to_string')
+ call assert_equal("function('g:Test_funcref_to_string')", string(Fn))
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index 083c111f0e..0199acade2 100644
--- a/src/version.c
+++ b/src/version.c
@@ -754,6 +754,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 3766,
+/**/
3765,
/**/
3764,