diff options
Diffstat (limited to 'src/testdir/test_vim9_func.vim')
-rw-r--r-- | src/testdir/test_vim9_func.vim | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim index 8ffaf976f..f4a42cec2 100644 --- a/src/testdir/test_vim9_func.vim +++ b/src/testdir/test_vim9_func.vim @@ -1903,6 +1903,41 @@ def Test_delfunc() delete('XToDelFunc') enddef +func Test_free_dict_while_in_funcstack() + " relies on the sleep command + CheckUnix + call Run_Test_free_dict_while_in_funcstack() +endfunc + +def Run_Test_free_dict_while_in_funcstack() + + # this was freeing the TermRun() default argument dictionary while it was + # still referenced in a funcstack_T + var lines =<< trim END + vim9script + + &updatetime = 400 + def TermRun(_ = {}) + def Post() + enddef + def Exec() + term_start('sleep 1', { + term_finish: 'close', + exit_cb: (_, _) => Post(), + }) + enddef + Exec() + enddef + nnoremap <F4> <Cmd>call <SID>TermRun()<CR> + timer_start(100, (_) => feedkeys("\<F4>")) + timer_start(1000, (_) => feedkeys("\<F4>")) + sleep 1500m + END + CheckScriptSuccess(lines) + nunmap <F4> + set updatetime& +enddef + def Test_redef_failure() writefile(['def Func0(): string', 'return "Func0"', 'enddef'], 'Xdef') so Xdef |