Mercurial > vim
diff src/testdir/test_vim9_func.vim @ 22541:7d6ba4204f66 v8.2.1819
patch 8.2.1819: Vim9: Memory leak when using a closure
Commit: https://github.com/vim/vim/commit/85d5e2b723e6fc233e53252dd5c523944146fbc2
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Oct 10 14:13:01 2020 +0200
patch 8.2.1819: Vim9: Memory leak when using a closure
Problem: Vim9: Memory leak when using a closure.
Solution: Compute the mininal refcount in the funcstack. Reenable disabled
tests.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 10 Oct 2020 14:15:04 +0200 |
parents | 9870e8b6ed78 |
children | c271498e03b2 |
line wrap: on
line diff
--- a/src/testdir/test_vim9_func.vim +++ b/src/testdir/test_vim9_func.vim @@ -1330,32 +1330,31 @@ def Test_closure_using_argument() unlet g:UseVararg enddef -" TODO: reenable after fixing memory leak -"def MakeGetAndAppendRefs() -" var local = 'a' -" -" def Append(arg: string) -" local ..= arg -" enddef -" g:Append = Append -" -" def Get(): string -" return local -" enddef -" g:Get = Get -"enddef -" -"def Test_closure_append_get() -" MakeGetAndAppendRefs() -" g:Get()->assert_equal('a') -" g:Append('-b') -" g:Get()->assert_equal('a-b') -" g:Append('-c') -" g:Get()->assert_equal('a-b-c') -" -" unlet g:Append -" unlet g:Get -"enddef +def MakeGetAndAppendRefs() + var local = 'a' + + def Append(arg: string) + local ..= arg + enddef + g:Append = Append + + def Get(): string + return local + enddef + g:Get = Get +enddef + +def Test_closure_append_get() + MakeGetAndAppendRefs() + g:Get()->assert_equal('a') + g:Append('-b') + g:Get()->assert_equal('a-b') + g:Append('-c') + g:Get()->assert_equal('a-b-c') + + unlet g:Append + unlet g:Get +enddef def Test_nested_closure() var local = 'text' @@ -1389,20 +1388,19 @@ def Test_double_closure_fails() CheckScriptSuccess(lines) enddef -" TODO: reenable after fixing memory leak -"def Test_nested_closure_used() -" var lines =<< trim END -" vim9script -" def Func() -" var x = 'hello' -" var Closure = {-> x} -" g:Myclosure = {-> Closure()} -" enddef -" Func() -" assert_equal('hello', g:Myclosure()) -" END -" CheckScriptSuccess(lines) -"enddef +def Test_nested_closure_used() + var lines =<< trim END + vim9script + def Func() + var x = 'hello' + var Closure = {-> x} + g:Myclosure = {-> Closure()} + enddef + Func() + assert_equal('hello', g:Myclosure()) + END + CheckScriptSuccess(lines) +enddef def Test_nested_closure_fails() var lines =<< trim END