summaryrefslogtreecommitdiff
path: root/src/testdir/test_vim9_func.vim
diff options
context:
space:
mode:
Diffstat (limited to 'src/testdir/test_vim9_func.vim')
-rw-r--r--src/testdir/test_vim9_func.vim35
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