Bram Moolenaar | 19a1669 | 2016-09-01 22:19:47 +0200 | [diff] [blame] | 1 | "Tests for nested functions |
2 | " | ||||
Bram Moolenaar | 8a01f96 | 2016-11-14 21:50:00 +0100 | [diff] [blame^] | 3 | func NestedFunc() |
4 | func! Func1() | ||||
Bram Moolenaar | 19a1669 | 2016-09-01 22:19:47 +0200 | [diff] [blame] | 5 | let g:text .= 'Func1 ' |
Bram Moolenaar | 8a01f96 | 2016-11-14 21:50:00 +0100 | [diff] [blame^] | 6 | endfunc |
Bram Moolenaar | 19a1669 | 2016-09-01 22:19:47 +0200 | [diff] [blame] | 7 | call Func1() |
Bram Moolenaar | 8a01f96 | 2016-11-14 21:50:00 +0100 | [diff] [blame^] | 8 | func! s:func2() |
Bram Moolenaar | 19a1669 | 2016-09-01 22:19:47 +0200 | [diff] [blame] | 9 | let g:text .= 's:func2 ' |
Bram Moolenaar | 8a01f96 | 2016-11-14 21:50:00 +0100 | [diff] [blame^] | 10 | endfunc |
Bram Moolenaar | 19a1669 | 2016-09-01 22:19:47 +0200 | [diff] [blame] | 11 | call s:func2() |
Bram Moolenaar | 8a01f96 | 2016-11-14 21:50:00 +0100 | [diff] [blame^] | 12 | func! s:_func3() |
Bram Moolenaar | 19a1669 | 2016-09-01 22:19:47 +0200 | [diff] [blame] | 13 | let g:text .= 's:_func3 ' |
Bram Moolenaar | 8a01f96 | 2016-11-14 21:50:00 +0100 | [diff] [blame^] | 14 | endfunc |
Bram Moolenaar | 19a1669 | 2016-09-01 22:19:47 +0200 | [diff] [blame] | 15 | call s:_func3() |
16 | let fn = 'Func4' | ||||
Bram Moolenaar | 8a01f96 | 2016-11-14 21:50:00 +0100 | [diff] [blame^] | 17 | func! {fn}() |
Bram Moolenaar | 19a1669 | 2016-09-01 22:19:47 +0200 | [diff] [blame] | 18 | let g:text .= 'Func4 ' |
Bram Moolenaar | 8a01f96 | 2016-11-14 21:50:00 +0100 | [diff] [blame^] | 19 | endfunc |
Bram Moolenaar | 19a1669 | 2016-09-01 22:19:47 +0200 | [diff] [blame] | 20 | call {fn}() |
21 | let fn = 'func5' | ||||
Bram Moolenaar | 8a01f96 | 2016-11-14 21:50:00 +0100 | [diff] [blame^] | 22 | func! s:{fn}() |
Bram Moolenaar | 19a1669 | 2016-09-01 22:19:47 +0200 | [diff] [blame] | 23 | let g:text .= 's:func5' |
Bram Moolenaar | 8a01f96 | 2016-11-14 21:50:00 +0100 | [diff] [blame^] | 24 | endfunc |
Bram Moolenaar | 19a1669 | 2016-09-01 22:19:47 +0200 | [diff] [blame] | 25 | call s:{fn}() |
Bram Moolenaar | 8a01f96 | 2016-11-14 21:50:00 +0100 | [diff] [blame^] | 26 | endfunc |
Bram Moolenaar | 19a1669 | 2016-09-01 22:19:47 +0200 | [diff] [blame] | 27 | |
Bram Moolenaar | 8a01f96 | 2016-11-14 21:50:00 +0100 | [diff] [blame^] | 28 | func Test_nested_functions() |
Bram Moolenaar | 19a1669 | 2016-09-01 22:19:47 +0200 | [diff] [blame] | 29 | let g:text = '' |
30 | call NestedFunc() | ||||
31 | call assert_equal('Func1 s:func2 s:_func3 Func4 s:func5', g:text) | ||||
32 | endfunction | ||||
Bram Moolenaar | 8a01f96 | 2016-11-14 21:50:00 +0100 | [diff] [blame^] | 33 | |
34 | func Test_nested_argument() | ||||
35 | func g:X() | ||||
36 | let g:Y = function('sort') | ||||
37 | endfunc | ||||
38 | let g:Y = function('sort') | ||||
39 | echo g:Y([], g:X()) | ||||
40 | delfunc g:X | ||||
41 | unlet g:Y | ||||
42 | endfunc |