119a1669fSBram Moolenaar"Tests for nested functions 219a1669fSBram Moolenaar" 38a01f969SBram Moolenaarfunc NestedFunc() 48a01f969SBram Moolenaar func! Func1() 519a1669fSBram Moolenaar let g:text .= 'Func1 ' 68a01f969SBram Moolenaar endfunc 719a1669fSBram Moolenaar call Func1() 88a01f969SBram Moolenaar func! s:func2() 919a1669fSBram Moolenaar let g:text .= 's:func2 ' 108a01f969SBram Moolenaar endfunc 1119a1669fSBram Moolenaar call s:func2() 128a01f969SBram Moolenaar func! s:_func3() 1319a1669fSBram Moolenaar let g:text .= 's:_func3 ' 148a01f969SBram Moolenaar endfunc 1519a1669fSBram Moolenaar call s:_func3() 1619a1669fSBram Moolenaar let fn = 'Func4' 178a01f969SBram Moolenaar func! {fn}() 1819a1669fSBram Moolenaar let g:text .= 'Func4 ' 198a01f969SBram Moolenaar endfunc 2019a1669fSBram Moolenaar call {fn}() 2119a1669fSBram Moolenaar let fn = 'func5' 228a01f969SBram Moolenaar func! s:{fn}() 2319a1669fSBram Moolenaar let g:text .= 's:func5' 248a01f969SBram Moolenaar endfunc 2519a1669fSBram Moolenaar call s:{fn}() 268a01f969SBram Moolenaarendfunc 2719a1669fSBram Moolenaar 288a01f969SBram Moolenaarfunc Test_nested_functions() 2919a1669fSBram Moolenaar let g:text = '' 3019a1669fSBram Moolenaar call NestedFunc() 3119a1669fSBram Moolenaar call assert_equal('Func1 s:func2 s:_func3 Func4 s:func5', g:text) 3219a1669fSBram Moolenaarendfunction 338a01f969SBram Moolenaar 348a01f969SBram Moolenaarfunc Test_nested_argument() 358a01f969SBram Moolenaar func g:X() 368a01f969SBram Moolenaar let g:Y = function('sort') 378a01f969SBram Moolenaar endfunc 388a01f969SBram Moolenaar let g:Y = function('sort') 398a01f969SBram Moolenaar echo g:Y([], g:X()) 408a01f969SBram Moolenaar delfunc g:X 418a01f969SBram Moolenaar unlet g:Y 428a01f969SBram Moolenaarendfunc 43*777b30f8SBram Moolenaar 44*777b30f8SBram Moolenaarfunc Recurse(count) 45*777b30f8SBram Moolenaar if a:count > 0 46*777b30f8SBram Moolenaar call Recurse(a:count - 1) 47*777b30f8SBram Moolenaar endif 48*777b30f8SBram Moolenaarendfunc 49*777b30f8SBram Moolenaar 50*777b30f8SBram Moolenaarfunc Test_max_nesting() 51*777b30f8SBram Moolenaar let call_depth_here = 2 52*777b30f8SBram Moolenaar let ex_depth_here = 5 53*777b30f8SBram Moolenaar set mfd& 54*777b30f8SBram Moolenaar 55*777b30f8SBram Moolenaar call Recurse(99 - call_depth_here) 56*777b30f8SBram Moolenaar call assert_fails('call Recurse(' . (100 - call_depth_here) . ')', 'E132:') 57*777b30f8SBram Moolenaar 58*777b30f8SBram Moolenaar set mfd=210 59*777b30f8SBram Moolenaar call Recurse(209 - ex_depth_here) 60*777b30f8SBram Moolenaar call assert_fails('call Recurse(' . (210 - ex_depth_here) . ')', 'E169:') 61*777b30f8SBram Moolenaar 62*777b30f8SBram Moolenaar set mfd& 63*777b30f8SBram Moolenaarendfunc 64