119a1669fSBram Moolenaar" Tests for nested functions 2*6d91bcb4SBram Moolenaar 3*6d91bcb4SBram Moolenaarsource check.vim 4*6d91bcb4SBram Moolenaar 58a01f969SBram Moolenaarfunc NestedFunc() 68a01f969SBram Moolenaar func! Func1() 719a1669fSBram Moolenaar let g:text .= 'Func1 ' 88a01f969SBram Moolenaar endfunc 919a1669fSBram Moolenaar call Func1() 108a01f969SBram Moolenaar func! s:func2() 1119a1669fSBram Moolenaar let g:text .= 's:func2 ' 128a01f969SBram Moolenaar endfunc 1319a1669fSBram Moolenaar call s:func2() 148a01f969SBram Moolenaar func! s:_func3() 1519a1669fSBram Moolenaar let g:text .= 's:_func3 ' 168a01f969SBram Moolenaar endfunc 1719a1669fSBram Moolenaar call s:_func3() 1819a1669fSBram Moolenaar let fn = 'Func4' 198a01f969SBram Moolenaar func! {fn}() 2019a1669fSBram Moolenaar let g:text .= 'Func4 ' 218a01f969SBram Moolenaar endfunc 2219a1669fSBram Moolenaar call {fn}() 2319a1669fSBram Moolenaar let fn = 'func5' 248a01f969SBram Moolenaar func! s:{fn}() 2519a1669fSBram Moolenaar let g:text .= 's:func5' 268a01f969SBram Moolenaar endfunc 2719a1669fSBram Moolenaar call s:{fn}() 288a01f969SBram Moolenaarendfunc 2919a1669fSBram Moolenaar 308a01f969SBram Moolenaarfunc Test_nested_functions() 3119a1669fSBram Moolenaar let g:text = '' 3219a1669fSBram Moolenaar call NestedFunc() 3319a1669fSBram Moolenaar call assert_equal('Func1 s:func2 s:_func3 Func4 s:func5', g:text) 3419a1669fSBram Moolenaarendfunction 358a01f969SBram Moolenaar 368a01f969SBram Moolenaarfunc Test_nested_argument() 378a01f969SBram Moolenaar func g:X() 388a01f969SBram Moolenaar let g:Y = function('sort') 398a01f969SBram Moolenaar endfunc 408a01f969SBram Moolenaar let g:Y = function('sort') 418a01f969SBram Moolenaar echo g:Y([], g:X()) 428a01f969SBram Moolenaar delfunc g:X 438a01f969SBram Moolenaar unlet g:Y 448a01f969SBram Moolenaarendfunc 45777b30f8SBram Moolenaar 46777b30f8SBram Moolenaarfunc Recurse(count) 47777b30f8SBram Moolenaar if a:count > 0 48777b30f8SBram Moolenaar call Recurse(a:count - 1) 49777b30f8SBram Moolenaar endif 50777b30f8SBram Moolenaarendfunc 51777b30f8SBram Moolenaar 52777b30f8SBram Moolenaarfunc Test_max_nesting() 53269aec7eSBram Moolenaar " TODO: why does this fail on Windows? Runs out of stack perhaps? 54*6d91bcb4SBram Moolenaar CheckNotMSWindows 55*6d91bcb4SBram Moolenaar 56777b30f8SBram Moolenaar let call_depth_here = 2 57777b30f8SBram Moolenaar let ex_depth_here = 5 58777b30f8SBram Moolenaar set mfd& 59777b30f8SBram Moolenaar 60777b30f8SBram Moolenaar call Recurse(99 - call_depth_here) 61777b30f8SBram Moolenaar call assert_fails('call Recurse(' . (100 - call_depth_here) . ')', 'E132:') 62777b30f8SBram Moolenaar 63777b30f8SBram Moolenaar set mfd=210 64777b30f8SBram Moolenaar call Recurse(209 - ex_depth_here) 65777b30f8SBram Moolenaar call assert_fails('call Recurse(' . (210 - ex_depth_here) . ')', 'E169:') 66777b30f8SBram Moolenaar 67777b30f8SBram Moolenaar set mfd& 68777b30f8SBram Moolenaarendfunc 69*6d91bcb4SBram Moolenaar 70*6d91bcb4SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 71