diff options
author | Bram Moolenaar <Bram@vim.org> | 2016-03-16 22:52:12 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2016-03-16 22:52:12 +0100 |
commit | 6f2e4b36c9d9908e1cace2b1b96e2c154a837bc2 (patch) | |
tree | cc33edb80550df0858eeb9b330aa7413acf138dd /src/testdir/test_partial.vim | |
parent | 65639032bb7b17996cd255d1508a1df4ad528a1f (diff) | |
download | vim-git-6f2e4b36c9d9908e1cace2b1b96e2c154a837bc2.tar.gz |
patch 7.4.1582v7.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.
Diffstat (limited to 'src/testdir/test_partial.vim')
-rw-r--r-- | src/testdir/test_partial.vim | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/src/testdir/test_partial.vim b/src/testdir/test_partial.vim index e9d9a3226..fe451cd8b 100644 --- a/src/testdir/test_partial.vim +++ b/src/testdir/test_partial.vim @@ -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 |