summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2014-04-29 14:03:02 +0200
committerBram Moolenaar <Bram@vim.org>2014-04-29 14:03:02 +0200
commit355a95a079d3c8c64cf496df434741891d07985a (patch)
treeeb32734a34f726ce3f3c718572c612de329476d6
parentd69bd9af3ccf5edd2138fb7abd68d35f7b84ef7e (diff)
downloadvim-git-7.4.268.tar.gz
updated for version 7.4.268v7.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.
-rw-r--r--Filelist1
-rw-r--r--src/eval.c8
-rw-r--r--src/testdir/test_eval.in3
-rw-r--r--src/testdir/test_eval.okbin10856 -> 10932 bytes
-rw-r--r--src/testdir/test_eval_func.vim10
-rw-r--r--src/version.c2
6 files changed, 24 insertions, 0 deletions
diff --git a/Filelist b/Filelist
index 9f73a3d89..60221160a 100644
--- 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 \
diff --git a/src/eval.c b/src/eval.c
index f91578928..3e1088a1e 100644
--- 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;
}
diff --git a/src/testdir/test_eval.in b/src/testdir/test_eval.in
index 214a99edb..8c3d839a4 100644
--- 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()
diff --git a/src/testdir/test_eval.ok b/src/testdir/test_eval.ok
index cfe045b53..f81927bae 100644
--- a/src/testdir/test_eval.ok
+++ b/src/testdir/test_eval.ok
Binary files differ
diff --git a/src/testdir/test_eval_func.vim b/src/testdir/test_eval_func.vim
new file mode 100644
index 000000000..4fcd0421a
--- /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')
diff --git a/src/version.c b/src/version.c
index 5aae1d2a7..bd97da3a4 100644
--- 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,