]> granicus.if.org Git - vim/commitdiff
updated for version 7.4.265 v7.4.265
authorBram Moolenaar <Bram@vim.org>
Thu, 24 Apr 2014 15:12:33 +0000 (17:12 +0200)
committerBram Moolenaar <Bram@vim.org>
Thu, 24 Apr 2014 15:12:33 +0000 (17:12 +0200)
Problem:    Can't call a global function with "g:" in an expression.
Solution:   Skip the "g:" when looking up the function.

src/eval.c
src/testdir/test_eval.in
src/testdir/test_eval.ok
src/version.c

index d0b58ea63520abaaaf4f2f6395a5f33fd83f96cd..f91578928334acdc61cc2be30e73d68a0a79ab60 100644 (file)
@@ -8485,33 +8485,39 @@ call_func(funcname, len, rettv, argcount, argvars, firstline, lastline,
     /* 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)
index 4919694bea5da0ad8351a7a6d9830bb584e8675f..214a99edb975ce66af9706abd5f6c9200bbcf0dc 100644 (file)
@@ -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 100644 (file)
Binary files a/src/testdir/test_eval.ok and b/src/testdir/test_eval.ok differ
index fc95a5ad028e0a7d09eac502079b3a7ebe48ff0a..94d985705b286922206491a7ca6c4daccc4e72ce 100644 (file)
@@ -734,6 +734,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    265,
 /**/
     264,
 /**/