2016-03-17 18:45 GMT+09:00 Bram Moolenaar <[email protected]>:
>
> Lilydjwg wrote:
>
>> On Wed, Mar 16, 2016 at 03:43:06PM +0100, Bram Moolenaar wrote:
>> >
>> > Kent Sibilev wrote:
>> >
>> > > On Tuesday, March 15, 2016 at 2:33:55 PM UTC-4, Bram Moolenaar wrote:
>> > > > Patch 7.4.1577
>> > > > Problem: Cannot pass "dict.Myfunc" around as a partial.
>> > > > Solution: Create a partial when expected.
>> > > > Files: src/eval.c, src/testdir/test_partial.vim
>> > > >
>> > >
>> > > This change doesn't allow functions like this:
>> > >
>> > > function! s:cache_clear(...) dict
>> > >
>> > > function! rails#cache_clear(...)
>> > >
>> > > to be defined at the same time. Any particular reason for this, cause
>> > > this change breaks vim-rails plugin.
>> >
>> > The patch should not change anything about what functions you can
>> > define.
>> >
>> > What is the error? Can you make a small example that fails?
>>
>> I get these:
>>
>> 处理 function <SNR>30_import[11]..<SNR>30__import[20]..<SNR>30__build_module
>> 时发生错误:
>> 第 14 行:
>> E924: can't have both a "self" dict and a partial: <SNR>30_load
>> Mark: Invalid value type for g:mwPalettes[maximum]
>>
>> At least two plugins are broken.
>>
>> One of them is the mark.vim plugin, which does this:
>>
>> elseif type(g:mwPalettes[g:mwDefaultHighlightingPalette]) ==
>> type(function('tr'))
>>
>> The left side evaluates to a function ref. The result is 10, not 2.
>>
>> The other is from an old version of neocomplete,
>> autoload/vital/_b6a796b.vim. You can view it here:
>> https://github.com/lilydjwg/dotvim/blob/master/autoload/vital/_b6a796b.vim#L144
>>
>> There are a lot of similar error messages from neocomplete too (both the
>> version I'm using and the latest version on GitHub).
>
> Please try the latest patch, hopefully this is fixed now.
This is not fixed in Vim 7.4.1603.
I think funcref and partial are same thing in Vim script, so
type({partial}) should return 2.
diff --git a/src/eval.c b/src/eval.c
index a2288f9..69969fe 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -20398,6 +20398,7 @@ f_type(typval_T *argvars, typval_T *rettv)
{
case VAR_NUMBER: n = 0; break;
case VAR_STRING: n = 1; break;
+ case VAR_PARTIAL:
case VAR_FUNC: n = 2; break;
case VAR_LIST: n = 3; break;
case VAR_DICT: n = 4; break;
@@ -20411,7 +20412,6 @@ f_type(typval_T *argvars, typval_T *rettv)
break;
case VAR_JOB: n = 8; break;
case VAR_CHANNEL: n = 9; break;
- case VAR_PARTIAL: n = 10; break;
case VAR_UNKNOWN:
EMSG2(_(e_intern2), "f_type(UNKNOWN)");
n = -1;
Or, a funcref in a dictionary must not be converted to a partial for
compatibility.
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.