diff options
author | Marco Hinz <mh.codebro@gmail.com> | 2014-04-26 10:24:06 +0200 |
---|---|---|
committer | Thiago de Arruda <tpadilha84@gmail.com> | 2014-04-28 08:00:28 -0300 |
commit | 9b9c1dee1352165fea2f9108456484b30b796fd6 (patch) | |
tree | 0ba21d04483152bd212f656c5d5137e0a2f99aa8 | |
parent | 4d0dd14189c0f0dd4ad561d65d97aa3e1589102b (diff) | |
download | rneovim-9b9c1dee1352165fea2f9108456484b30b796fd6.tar.gz rneovim-9b9c1dee1352165fea2f9108456484b30b796fd6.tar.bz2 rneovim-9b9c1dee1352165fea2f9108456484b30b796fd6.zip |
vim-patch:7.4.264
Problem: Can't define a function starting with "g:". Can't assign a
funcref to a buffer-local variable.
Solution: Skip "g:" at the start of a function name.
Don't check for colons when assigning to a variable.
https://code.google.com/p/vim/source/detail?r=00acac0af680c2d8c82db5258474b121a5908926
-rw-r--r-- | src/eval.c | 16 | ||||
-rw-r--r-- | src/testdir/test_eval.in | 21 | ||||
-rw-r--r-- | src/testdir/test_eval.ok | 2 | ||||
-rw-r--r-- | src/version.c | 2 |
4 files changed, 32 insertions, 9 deletions
diff --git a/src/eval.c b/src/eval.c index fe93527a36..62f9193305 100644 --- a/src/eval.c +++ b/src/eval.c @@ -17302,7 +17302,6 @@ void ex_function(exarg_T *eap) // Get the function name. There are these situations: // func function name // "name" == func, "fudi.fd_dict" == NULL - // s:func script-local function name // dict.func new dictionary entry // "name" == NULL, "fudi.fd_dict" set, // "fudi.fd_di" == NULL, "fudi.fd_newkey" == func @@ -17312,6 +17311,8 @@ void ex_function(exarg_T *eap) // dict.func existing dict entry that's not a Funcref // "name" == NULL, "fudi.fd_dict" set, // "fudi.fd_di" set, "fudi.fd_newkey" == NULL + // s:func script-local function name + // g:func global function name, same as "func" p = eap->arg; name = trans_function_name(&p, eap->skip, 0, &fudi); paren = (vim_strchr(p, '(') != NULL); @@ -17917,8 +17918,10 @@ trans_function_name ( lead = 2; } } else { - if (lead == 2) /* skip over "s:" */ + // Skip over "s:" and "g:". + if (lead == 2 || (lv.ll_name[0] == 'g' && lv.ll_name[1] == ':')) { lv.ll_name += 2; + } len = (int)(end - lv.ll_name); } @@ -17942,17 +17945,16 @@ trans_function_name ( lead += (int)STRLEN(sid_buf); } } else if (!(flags & TFN_INT) && builtin_function(lv.ll_name, len)) { - EMSG2(_( - "E128: Function name must start with a capital or \"s:\": %s"), - lv.ll_name); + EMSG2(_("E128: Function name must start with a capital or \"s:\": %s"), + start); goto theend; } - if (!skip) { + if (!skip && !(flags & TFN_QUIET)) { char_u *cp = vim_strchr(lv.ll_name, ':'); if (cp != NULL && cp < end) { - EMSG2(_("E884: Function name cannot contain a colon: %s"), lv.ll_name); + EMSG2(_("E884: Function name cannot contain a colon: %s"), start); goto theend; } } diff --git a/src/testdir/test_eval.in b/src/testdir/test_eval.in index 44eeabfe73..a142036522 100644 --- a/src/testdir/test_eval.in +++ b/src/testdir/test_eval.in @@ -1,5 +1,5 @@ STARTTEST -:" function name includes a colon +:" function name not starting with a capital :try : func! g:test() : echo "test" @@ -15,9 +15,28 @@ STARTTEST :catch : let @b = v:exception :endtry +:" function name includes a colon +:try +: func! b:test() +: echo "test" +: endfunc +:catch +: let @c = v:exception +:endtry +:" function name starting with/without "g:", buffer-local funcref. +:function! g:Foo() +: let @d = 'called Foo()' +:endfunction +:let b:my_func = function('Foo') +:let @d = 'xxx' +:call b:my_func() +:endfunction +:" clean up :%d :pu a :pu b +:pu c +:pu d :1d :wq! test.out ENDTEST diff --git a/src/testdir/test_eval.ok b/src/testdir/test_eval.ok index 8aaac316c5..601a4261c8 100644 --- a/src/testdir/test_eval.ok +++ b/src/testdir/test_eval.ok @@ -1,2 +1,4 @@ Vim(function):E128: Function name must start with a capital or "s:": g:test() Vim(function):E128: Function name must start with a capital or "s:": test2() "# +Vim(function):E128: Function name must start with a capital or "s:": b:test() +called Foo() diff --git a/src/version.c b/src/version.c index 57fea5d514..c1d82a2952 100644 --- a/src/version.c +++ b/src/version.c @@ -203,7 +203,7 @@ static char *(features[]) = { static int included_patches[] = { // Add new patch number below this line //265, - //264, + 264, //263, //262, 261, |