summaryrefslogtreecommitdiffstats
path: root/src/testdir/test_vim9_script.vim
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2022-12-12 18:56:32 +0000
committerBram Moolenaar <Bram@vim.org>2022-12-12 18:56:32 +0000
commit6342e2c5a6570231aefabd8e34c2f2cb22f6927a (patch)
tree68f2498cf9c05c16d55cd0d6953a1df65540c7f1 /src/testdir/test_vim9_script.vim
parent67578e5bcf7404d40d42876b738b72e68add1a3e (diff)
patch 9.0.1050: using freed memory when assigning to variable twicev9.0.1050
Problem: Using freed memory when assigning to variable twice. Solution: Make copy of the list type. (closes #11691)
Diffstat (limited to 'src/testdir/test_vim9_script.vim')
-rw-r--r--src/testdir/test_vim9_script.vim30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index b6e1a89d24..c489ae55d8 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -4519,6 +4519,36 @@ def Test_echo_uninit_variables()
endif
enddef
+def Test_free_type_before_use()
+ # this rather complicated script was freeing a type before using it
+ var lines =<< trim END
+ vim9script
+
+ def Scan(rel: list<dict<any>>): func(func(dict<any>))
+ return (Emit: func(dict<any>)) => {
+ for t in rel
+ Emit(t)
+ endfor
+ }
+ enddef
+
+ def Build(Cont: func(func(dict<any>))): list<dict<any>>
+ var rel: list<dict<any>> = []
+ Cont((t) => {
+ add(rel, t)
+ })
+ return rel
+ enddef
+
+ var R = [{A: 0}]
+ var result = Scan(R)->Build()
+ result = Scan(R)->Build()
+
+ assert_equal(R, result)
+ END
+ v9.CheckScriptSuccess(lines)
+enddef
+
" Keep this last, it messes up highlighting.
def Test_substitute_cmd()
new