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
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
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')
--- 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 */
 /**/
+    268,
+/**/
     267,
 /**/
     266,