1
0
forked from aniani/vim

patch 7.4.1582

Problem:    Get E923 when using function(dict.func, [], dict). (Kent Sibilev)
            Storing a function with a dict in a variable drops the dict if the
            function is script-local.
Solution:   Translate the function name.  Use dict arg if present.
This commit is contained in:
Bram Moolenaar
2016-03-16 22:52:12 +01:00
parent 65639032bb
commit 6f2e4b36c9
3 changed files with 111 additions and 75 deletions

View File

@@ -70,8 +70,6 @@ func Test_partial_implicit()
let Func = function(dict.MyFunc, ['bbb'])
call assert_equal('foo/bbb', Func())
call assert_fails('call function(dict.MyFunc, ["bbb"], dict)', 'E924:')
endfunc
fun InnerCall(funcref)
@@ -87,3 +85,24 @@ func Test_function_in_dict()
call OuterCall()
endfunc
function! s:cache_clear() dict
return self.name
endfunction
func Test_script_function_in_dict()
let s:obj = {'name': 'foo'}
let s:obj2 = {'name': 'bar'}
let s:obj['clear'] = function('s:cache_clear')
call assert_equal('foo', s:obj.clear())
let F = s:obj.clear
call assert_equal('foo', F())
call assert_equal('foo', call(s:obj.clear, [], s:obj))
call assert_equal('bar', call(s:obj.clear, [], s:obj2))
let s:obj2['clear'] = function('s:cache_clear')
call assert_equal('bar', s:obj2.clear())
let B = s:obj2.clear
call assert_equal('bar', B())
endfunc