Mercurial > vim
changeset 5844:8ec9d2196bee v7.4.265
updated for version 7.4.265
Problem: Can't call a global function with "g:" in an expression.
Solution: Skip the "g:" when looking up the function.
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Thu, 24 Apr 2014 17:12:33 +0200 |
parents | 00e843ceb21b |
children | 01f2b7e6b33c |
files | src/eval.c src/testdir/test_eval.in src/testdir/test_eval.ok src/version.c |
diffstat | 4 files changed, 19 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/src/eval.c +++ b/src/eval.c @@ -8485,33 +8485,39 @@ call_func(funcname, len, rettv, argcount /* execute the function if no errors detected and executing */ if (evaluate && error == ERROR_NONE) { + char_u *rfname = fname; + + /* Ignore "g:" before a function name. */ + if (fname[0] == 'g' && fname[1] == ':') + rfname = fname + 2; + rettv->v_type = VAR_NUMBER; /* default rettv is number zero */ rettv->vval.v_number = 0; error = ERROR_UNKNOWN; - if (!builtin_function(fname, -1)) + if (!builtin_function(rfname, -1)) { /* * User defined function. */ - fp = find_func(fname); + fp = find_func(rfname); #ifdef FEAT_AUTOCMD /* Trigger FuncUndefined event, may load the function. */ if (fp == NULL && apply_autocmds(EVENT_FUNCUNDEFINED, - fname, fname, TRUE, NULL) + rfname, rfname, TRUE, NULL) && !aborting()) { /* executed an autocommand, search for the function again */ - fp = find_func(fname); + fp = find_func(rfname); } #endif /* Try loading a package. */ - if (fp == NULL && script_autoload(fname, TRUE) && !aborting()) + if (fp == NULL && script_autoload(rfname, TRUE) && !aborting()) { /* loaded a package, search for the function again */ - fp = find_func(fname); + fp = find_func(rfname); } if (fp != NULL)
--- a/src/testdir/test_eval.in +++ b/src/testdir/test_eval.in @@ -172,11 +172,13 @@ endfun :endtry :" :" function name starting with/without "g:", buffer-local funcref. -:function! g:Foo() -: $put ='called Foo()' +:function! g:Foo(n) +: $put ='called Foo(' . a:n . ')' :endfunction :let b:my_func = function('Foo') -:call b:my_func() +:call b:my_func(1) +:echo g:Foo(2) +:echo Foo(3) :" :/^start:/+1,$wq! test.out :" vim: et ts=4 isk-=\: fmr=???,???
index 57383be748130aaf7c90ad5ed77978e8374307b1..cfe045b53e0418bf4ac285fa24f4f42a82e86982 GIT binary patch literal 10856 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 C^`FK7