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
--- a/src/version.c
+++ b/src/version.c
@@ -735,6 +735,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    265,
+/**/
     264,
 /**/
     263,