Mercurial > vim
changeset 5850:1a5ed2626b26 v7.4.268
updated for version 7.4.268
Problem: Using exists() on a funcref for a script-local function does not
work.
Solution: Translate <SNR> to the special byte sequence. Add a test.
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Tue, 29 Apr 2014 14:03:02 +0200 |
parents | 43612f2da963 |
children | e82f5d698496 |
files | Filelist src/eval.c src/testdir/test_eval.in src/testdir/test_eval.ok src/testdir/test_eval_func.vim src/version.c |
diffstat | 6 files changed, 24 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/Filelist +++ b/Filelist @@ -88,6 +88,7 @@ SRC_ALL = \ src/testdir/test60.vim \ src/testdir/test83-tags? \ src/testdir/test77a.com \ + src/testdir/test_*.vim \ src/testdir/python2/*.py \ src/testdir/python3/*.py \ src/testdir/pythonx/*.py \
--- a/src/eval.c +++ b/src/eval.c @@ -22275,6 +22275,14 @@ trans_function_name(pp, skip, flags, fdp { name = vim_strsave(name); *pp = end; + if (STRNCMP(name, "<SNR>", 5) == 0) + { + /* Change "<SNR>" to the byte sequence. */ + name[0] = K_SPECIAL; + name[1] = KS_EXTRA; + name[2] = (int)KE_SNR; + mch_memmove(name + 3, name + 5, STRLEN(name + 5) + 1); + } goto theend; }
--- a/src/testdir/test_eval.in +++ b/src/testdir/test_eval.in @@ -180,6 +180,9 @@ endfun :echo g:Foo(2) :echo Foo(3) :" +:" script-local function used in Funcref must exist. +:so test_eval_func.vim +:" :/^start:/+1,$wq! test.out :" vim: et ts=4 isk-=\: fmr=???,??? :call getchar()
index cfe045b53e0418bf4ac285fa24f4f42a82e86982..f81927bae793f17312ce2f6dad8cf7fba80c8454 GIT binary patch literal 10932 zc%02zOHboS5bm?3y>f144*`i$Vms{2WR*h_JAgEr%Z%oNIM~5JRwhA?nHhxkzi+>) zA9l4#V0Kv!*siYnzUp>Wb#;=br>BsXMNR8sTW^EjnAVT?1^xaf{hpN%#h7OKk{(|4 z*`<GZbWDq%_f<ovjlS7N1hpd1nf(SDzqy8vJecg}W{*AgxLDk9!zVu7S+-p*>9(k= z;zrGz$s;8>>}UOB%8{o0y6hhX8Adl%d{fs^TO3R#!GzyWT!LH?%=q;?Bgip=nL?Vm z1hyCmW(|U+BAD}Q$q1I%TF+rk=PrXI=M?;wUmcDs#gXvqH^y;=aU_71xEzjLaU?B{ zLUE-0nlp|<aU6_nl2l=(E{83Kl}Z~7*NS1muLq3b8f920sD;a5i-BR$V7O5Xr(zD_ zka64qM>w=eP8HgzOJa+G<dllP2Gy;iIunx-RJS<QnZi7CscbP&ouO3cit3zkoMX{@ zuAt6c23rga=M$Ni)BF2keYINO&@KB{7PMTgi!J@Js&9e!$n|0hnYx5joua8KR3I^> zzMHhDf=*u{n0Tm5$gwFF|I$|I5eHwIB3^XpsywlTt&A}%678@gl1r*1j0Vc<=T5fn zLQ2Qwpsz5>_nCQ1qtJmuC=J{qi7M!FDFi-lag*EJ2PbWEq3IAvTf_~&s_T%DdRHXc zWl01Ck@^Uu!ScDen=RsZAP2pRD%{UchVHr!yQd&6yPQ$j&rD|z9As*AhrdZcZ6J3Q z=CB>>S~17>W1(YqUv1Ucp8aZiw-$m{b<n!HUe2*t0tTVkrqLLvThAN85`&jQ-taVm z?jnb+KS7f*Awo$v6WXfLZFsf7nMA$9BzGN2p#{;7q^Kh)5lXt{&{l3s;@8q0igG0N zIiiCo#ezsNi2pi9+(}3f%&%RnREVX4^ihagfwq9QN(b5k3$z6hI=YL}MsAno*V0W_ zASA6u;`66x+Xv#^x+A>{H#b0c1h(a<wG1;!pq5~U)@_Y76D6`y%G#s4KruQbyNS2D zL`0Vigb5plY7zylnI(E=rInj*>u(Sfgb*8sg8)L9!sPI%H()8kg$+X-BU}qTx!j7} z181{Z=r^-K2$4}8s%(#>GETn~b<Lx+T(L7~SD^9}sf@R{f7y8`jUh1OM#wq?x*>~^ z{aS{bBr2`l+F9^ftOK*b)EH6AJd0bayacYf<jSpcs#{y<;QYM7<qqh5r8%oBU`m7< zeo)nJCk>Lu2*hZ6Lj1IP5gyY>7AW=<Uz#JUVGBvbD;klwA&-x!uWkA^{SK<!jWCF~ zPeI$KYvU7l<{EXTiQe=88wXmTw5#s3@jNy0ywm}WpHpHY)lB%RlSSM-!*y$#kPoEH zANi#W{j4MQrJfb&s*#M#Rx)&|n(UAwv}02do=dlKtH2-p;id_ZiY6&k*A?f@yy?_5 ziKKcFCT^F1l@ekH#5VxJ!ZfV>QJq&DwQ{Ue)g+x1q32%p+J!#8qeF<ui`m8PP=UMV zp1-dxbOjJ^@`CpWDl|+k;H`oVCaH~u6x=n>!+V<QCPN3N9P&qJsrL)K`+$g(7jt^C zBM<JH2cCUxp>K%;6}xf-ZDLfk<$4QB(A+WsD%G(tg}dhAV^33kB7yAV@h-1<N2Ptf z)xD5CjflfC((h}xR3Sv!JrnrQIcb*8BzifjFTF^hbUcYhOq@sirJHn?+jVD;<*Ov= zO2n6g`chP`09Qhjm6)7~bj<7h<b7w(67?K)C!po4Wa&)i7lT^6l(kJ!mFtv%D8iDS zn3Ovi%5^vyI-fEOyV75JEsVR<*>YP^b(MzKz*=QvpTBmAQ7b2Kz2}tApLRU3jNT2M z>>a&}#66J@v5}9Ih-vWYWN2ApaH?o<Ah?T33qlu^mpWjVt^bY{${Mp*rHoq!U>3A& zT4l~OvZJNz1Q!@D_)~0+j6f(HQH2rzsF?$+!X+T}ZA=g_C~U8B$0?z2K(C7}M^P14 z*azA;KrFo{-cji~!v)3}{uEmyBM`!?@qeYufmKNrkoq<z2$=4qUgM8b-QR*A+C2^; z-;Fd6v~7SGqF-psnmfu}Z@9pC!=GYnWCTKZJGu2`_(Ay5*+)3Es`3I<-^K)igH7Ny z4mtbH8_?^0iKDn1kJ@Mi8hZjPEwz!5k6JikI?BVL>zx!C|KxM*jE>BJerw|Ua{U7X z_xo~1Bi9QEtcRF*py5-;U*o3pndbk*CH=jH#M7@8z~qZnP}YbG1dT>kEpKVIz7q2+ zw%gTa-S~CR0ABrolMk>BYM`b#a97M0gV%$J51shop==2qo4^^+6r{m15ghzCNrRsE z*G$+PqzU|>X#l@yLXk-aH0r;y(&)teU@EPuO|=cupT+V)G=j^lEKTS4ZFP6ZB}d~l z3_p(P=S@wE_2%J*y~*n4;jUP-uJL+P(d&oxvSx2|tZY4q;lBVWKLI_aqXzbeG5xyP z(7SB?_%h@RRy!gG^nE-W(+B<&7W#=b%rx85jDD#rCh&Xr^mhXz1dL=Q+{miO-H_Nk zFD_r{P;by<D7}#V??pWq?ZbzdFNsLh`>d{uYTZa!${-j|QL$xxq-*x-mYa2*t=6>u zv7u~f?>3eCagUFG^0xdTXXoVHjZ1#reMPw%#10R!h=tffJ=1k|SJ1l$X0olbs+LEn zjB($u>a66x^|s^QnBI)}?-EsRy&5h5rDz;0Iy|Di-vhoJ#T8v_Hauyqr^tDVkAm&^ eD>M76V6TZEBFA(Xa7SoM9tN|lvYv#NEBXhPWw{do
new file mode 100644 --- /dev/null +++ b/src/testdir/test_eval_func.vim @@ -0,0 +1,10 @@ +" Vim script used in test_eval.in. Needed for script-local function. + +func! s:Testje() + return "foo" +endfunc +let Bar = function('s:Testje') +$put ='s:Testje exists: ' . exists('s:Testje') +$put ='func s:Testje exists: ' . exists('*s:Testje') +$put ='Bar exists: ' . exists('Bar') +$put ='func Bar exists: ' . exists('*Bar')