Mercurial > vim
diff src/testdir/test_vim9_disassemble.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 | 49f6201f79a3 |
children | 6589dae9696c |
line wrap: on
line diff
--- a/src/testdir/test_vim9_disassemble.vim +++ b/src/testdir/test_vim9_disassemble.vim @@ -436,42 +436,42 @@ def Test_disassemble_call() res) enddef -" TODO: fix memory leak and enable again -"def s:CreateRefs() -" 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_disassemble_closure() -" CreateRefs() -" var res = execute('disass g:Append') -" assert_match('<lambda>\d\_s*' .. -" 'local ..= arg\_s*' .. -" '\d LOADOUTER $0\_s*' .. -" '\d LOAD arg\[-1\]\_s*' .. -" '\d CONCAT\_s*' .. -" '\d STOREOUTER $0\_s*' .. -" '\d PUSHNR 0\_s*' .. -" '\d RETURN', -" res) -" -" res = execute('disass g:Get') -" assert_match('<lambda>\d\_s*' .. -" 'return local\_s*' .. -" '\d LOADOUTER $0\_s*' .. -" '\d RETURN', -" res) -" -" unlet g:Append -" unlet g:Get -"enddef + +def s:CreateRefs() + 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_disassemble_closure() + CreateRefs() + var res = execute('disass g:Append') + assert_match('<lambda>\d\_s*' .. + 'local ..= arg\_s*' .. + '\d LOADOUTER $0\_s*' .. + '\d LOAD arg\[-1\]\_s*' .. + '\d CONCAT\_s*' .. + '\d STOREOUTER $0\_s*' .. + '\d PUSHNR 0\_s*' .. + '\d RETURN', + res) + + res = execute('disass g:Get') + assert_match('<lambda>\d\_s*' .. + 'return local\_s*' .. + '\d LOADOUTER $0\_s*' .. + '\d RETURN', + res) + + unlet g:Append + unlet g:Get +enddef def EchoArg(arg: string): string