# HG changeset patch # User Bram Moolenaar # Date 1398352353 -7200 # Node ID 8ec9d2196bee0c5108f2d2c196a660a7f4e5f29f # Parent 00e843ceb21bd5e84dd1ce24c3f2330a06fa2f6d 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. diff --git a/src/eval.c b/src/eval.c --- 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) diff --git a/src/testdir/test_eval.in b/src/testdir/test_eval.in --- 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=???,??? diff --git a/src/testdir/test_eval.ok b/src/testdir/test_eval.ok index 57383be748130aaf7c90ad5ed77978e8374307b1..cfe045b53e0418bf4ac285fa24f4f42a82e86982 GIT binary patch literal 10856 zc%02zOHboS5bm?3y>f144*`i$5NYj)zwKJA0G$2EGk|VyJ{D8M!b5sEBN<6`S+~6FGf7em;CUe zD=yv3qhntDyxZ1<#^|eS#7Hall-X~n@tbex$)oXpZg#|DM~c;rG<=lPoo2h$lJAOY zTin3Bg**nyVK?g@bBQ#O*Jbx8$|$-C@J)P2U2!xXM`L+E_6c$zn9A#SL6B1fQ$U*f z1g;nfrZs{k5X|JY6a-6Zt!KEVGoQheOA2`_uO7!0aLncPtKhhzIOd2o_c=T{aLgMV z1#qPDnhTBsI1Yv`NeWo0&*6%3rP3P1H83pX^*}IOlMD-hTKEjE7#S8dh8tiwRdX2h z1;-6?4Eip~DWIMDB(4}qPPzK4QGEldGc_4S^^K-F1I#m@$`vEk8A){xROf=@oQmFa zfI9aXTro17k9A&7?(T~9)oOjicj8}J@N%^-cKpYx`i8tmz84eB)Fr0sgiKYXf{Cg1 z{iG!oO!_LpI6z%uj!mfe*S1QJdHC9t@S;T*^28A~GRCe*yvLGgF0D>5TBx9(d)fL6 zsU6pYp~9%&XBI4tN(T#}Ht>risbI>b5`?(bP403ZoHWUmrbnP{2{*#3zC%hHT#l2I?E9B;WwuIl29tBk^f&5jN z;dX3l#f;vMm5$wgja6-X4y&2nS_vA}!RVTLIiq3;8I)#|#$b?cJ#BlvFKCs}{9h+Uaz5)6pxGl$xWteILSb`~8w++@*mB?BtYmS-%CFqFkX2I$b zGgC4MCTbX~NgOq1Ha9aXo!s|!L=}x%bmzQ z@HVT3c{2-wkQgUc}Km#v4=1Oqdvg{(JV8nT4g zuXVU-qSD!|y#=2pCNOJEwGmk6Y0_BbC34L)SMHos{n|Q1=Vvu8f57Z3^;umZ(_E?1 z2UX+tyhc(R!5D2$NS;_-VqlqD>0ux{|z}H?5jB zk)Rh5;%51Wlu$b$y#Xi|q2c5YbY4l^$gx&cn{--4o_pc7D}8!L#}LsMyNkP_f_L>j z|GBo<6=1yS3*93?XxLn!TLlwLTAK))o*)Qns10zmf?CHgg zJiMzPc%EyEeM=HS?CKG+iGgU#%@#B#bIS&(R;R)g@9Kw-XPTN531**+cYV!UD(%y) z?uG7YR2-JEd0+db3S(gRMBroRWLR30=;f%P^kNa{1QLzeIFFx~ZrWLC*PcC&ubQMS z5nm1(N>RN6Qi)7fW^*PsF>m&h_pLe0;5lwjK*v|j(wfXK26c8RXPe@X>ztt|rjnl7 zlsoC`bvWsJpEC5@(qDV6jN8-MaT}=GO2cblowD(qzh;Snl~cIEbIRvWdmdPZ@A_W$ z4&TMN7T>4H(f%QT@CC>6yNmY>MHem#q>7-uck5}E_f*;#G38LSP zHjj*LL>Q7^XzQ9g%zba9z9^JVzK;G?&XNNA|?3e?;tjDW*U;580; z`^_8Bn|(>5_!|#wGzv{TA(oN4NW@1ik}w_SgTC*b7FqxFbK;E-?SOe}>icr@0|Wp2 za-h-cg#^w+!UE9vspGG4)B8;Gf8vt)-a_M<*NR~J#R8Nw;sar$k!_dXc(%S$^DK6| z)n;A$bxsdoeNU42s12$IQ|$RG=8Dnl-Z+HL!thwOl#WZ_4Hybm;}|Or`J1F(C-`e7 zY7W{2f6&y!Uo?@(tOc6%AFK>Ivp<+hx7*Ej7o|Uo<-KYImswfb&hP8$_E1WWM(JSi zal}7wDqgHN_c!8AZg1{yi?!$)uQywMeZO8-;*E~LHh?(z7a;W~pvQbz!~QVhe{DAW zHd{Zu4EaLTj@SczpY%ukUjBrIe-aHd&vrcHU#hJTguQ$GyM{49jQL8rk!>ILLlX16 zxO}BUonA+vbOz#oC+_%YA3h{>6is5qhey2gdnA{mxZ;b=MkcNE6njs}QS=Wq C^`FK7 diff --git a/src/version.c b/src/version.c --- 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,