blob: 5599655461e4b015c01e6f9e51cbd18e7b7eea22 [file] [log] [blame]
Bram Moolenaar6d91bcb2020-08-12 18:50:36 +02001" Tests for nested functions
2
3source check.vim
4
Bram Moolenaar8a01f962016-11-14 21:50:00 +01005func NestedFunc()
6 func! Func1()
Bram Moolenaar19a16692016-09-01 22:19:47 +02007 let g:text .= 'Func1 '
Bram Moolenaar8a01f962016-11-14 21:50:00 +01008 endfunc
Bram Moolenaar19a16692016-09-01 22:19:47 +02009 call Func1()
Bram Moolenaar8a01f962016-11-14 21:50:00 +010010 func! s:func2()
Bram Moolenaar19a16692016-09-01 22:19:47 +020011 let g:text .= 's:func2 '
Bram Moolenaar8a01f962016-11-14 21:50:00 +010012 endfunc
Bram Moolenaar19a16692016-09-01 22:19:47 +020013 call s:func2()
Bram Moolenaar8a01f962016-11-14 21:50:00 +010014 func! s:_func3()
Bram Moolenaar19a16692016-09-01 22:19:47 +020015 let g:text .= 's:_func3 '
Bram Moolenaar8a01f962016-11-14 21:50:00 +010016 endfunc
Bram Moolenaar19a16692016-09-01 22:19:47 +020017 call s:_func3()
18 let fn = 'Func4'
Bram Moolenaar8a01f962016-11-14 21:50:00 +010019 func! {fn}()
Bram Moolenaar19a16692016-09-01 22:19:47 +020020 let g:text .= 'Func4 '
Bram Moolenaar8a01f962016-11-14 21:50:00 +010021 endfunc
Bram Moolenaar19a16692016-09-01 22:19:47 +020022 call {fn}()
23 let fn = 'func5'
Bram Moolenaar8a01f962016-11-14 21:50:00 +010024 func! s:{fn}()
Bram Moolenaar19a16692016-09-01 22:19:47 +020025 let g:text .= 's:func5'
Bram Moolenaar8a01f962016-11-14 21:50:00 +010026 endfunc
Bram Moolenaar19a16692016-09-01 22:19:47 +020027 call s:{fn}()
Bram Moolenaar8a01f962016-11-14 21:50:00 +010028endfunc
Bram Moolenaar19a16692016-09-01 22:19:47 +020029
Bram Moolenaar8a01f962016-11-14 21:50:00 +010030func Test_nested_functions()
Bram Moolenaar19a16692016-09-01 22:19:47 +020031 let g:text = ''
32 call NestedFunc()
33 call assert_equal('Func1 s:func2 s:_func3 Func4 s:func5', g:text)
34endfunction
Bram Moolenaar8a01f962016-11-14 21:50:00 +010035
36func Test_nested_argument()
37 func g:X()
38 let g:Y = function('sort')
39 endfunc
40 let g:Y = function('sort')
41 echo g:Y([], g:X())
42 delfunc g:X
43 unlet g:Y
44endfunc
Bram Moolenaar777b30f2017-01-02 15:26:27 +010045
46func Recurse(count)
47 if a:count > 0
48 call Recurse(a:count - 1)
49 endif
50endfunc
51
52func Test_max_nesting()
Bram Moolenaar269aec72017-01-02 18:32:39 +010053 " TODO: why does this fail on Windows? Runs out of stack perhaps?
Bram Moolenaar6d91bcb2020-08-12 18:50:36 +020054 CheckNotMSWindows
55
Bram Moolenaar777b30f2017-01-02 15:26:27 +010056 let call_depth_here = 2
57 let ex_depth_here = 5
58 set mfd&
59
60 call Recurse(99 - call_depth_here)
61 call assert_fails('call Recurse(' . (100 - call_depth_here) . ')', 'E132:')
62
63 set mfd=210
64 call Recurse(209 - ex_depth_here)
65 call assert_fails('call Recurse(' . (210 - ex_depth_here) . ')', 'E169:')
66
67 set mfd&
68endfunc
Bram Moolenaar6d91bcb2020-08-12 18:50:36 +020069
70" vim: shiftwidth=2 sts=2 expandtab