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 43777b30f8SBram Moolenaar 44777b30f8SBram Moolenaarfunc Recurse(count) 45777b30f8SBram Moolenaar if a:count > 0 46777b30f8SBram Moolenaar call Recurse(a:count - 1) 47777b30f8SBram Moolenaar endif 48777b30f8SBram Moolenaarendfunc 49777b30f8SBram Moolenaar 50777b30f8SBram Moolenaarfunc Test_max_nesting() 51*269aec7eSBram Moolenaar " TODO: why does this fail on Windows? Runs out of stack perhaps? 52*269aec7eSBram Moolenaar if has('win32') 53*269aec7eSBram Moolenaar return 54*269aec7eSBram Moolenaar endif 55777b30f8SBram Moolenaar let call_depth_here = 2 56777b30f8SBram Moolenaar let ex_depth_here = 5 57777b30f8SBram Moolenaar set mfd& 58777b30f8SBram Moolenaar 59777b30f8SBram Moolenaar call Recurse(99 - call_depth_here) 60777b30f8SBram Moolenaar call assert_fails('call Recurse(' . (100 - call_depth_here) . ')', 'E132:') 61777b30f8SBram Moolenaar 62777b30f8SBram Moolenaar set mfd=210 63777b30f8SBram Moolenaar call Recurse(209 - ex_depth_here) 64777b30f8SBram Moolenaar call assert_fails('call Recurse(' . (210 - ex_depth_here) . ')', 'E169:') 65777b30f8SBram Moolenaar 66777b30f8SBram Moolenaar set mfd& 67777b30f8SBram Moolenaarendfunc 68