# HG changeset patch # User Bram Moolenaar # Date 1639068304 -3600 # Node ID cc95e10e1cf261d380db5c4470039b89d6fd718e # Parent d76f275bc6dc9f3cc4f9b3f2d5a0e301885c1ef9 patch 8.2.3766: converting a funcref to a string leaves out "g:" Commit: https://github.com/vim/vim/commit/c4ec338fb80ebfb5d631f0718fdd1a1c04d9ed82 Author: Bram Moolenaar Date: Thu Dec 9 16:40:18 2021 +0000 patch 8.2.3766: converting a funcref to a string leaves out "g:" 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. diff --git a/src/eval.c b/src/eval.c --- 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 --- 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 --- 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,