Mercurial > vim
comparison 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 |
comparison
equal
deleted
inserted
replaced
22540:f0fd5cb81663 | 22541:7d6ba4204f66 |
---|---|
434 '\d\+ PUSHS "yes"\_s*' .. | 434 '\d\+ PUSHS "yes"\_s*' .. |
435 '\d\+ RETURN', | 435 '\d\+ RETURN', |
436 res) | 436 res) |
437 enddef | 437 enddef |
438 | 438 |
439 " TODO: fix memory leak and enable again | 439 |
440 "def s:CreateRefs() | 440 def s:CreateRefs() |
441 " var local = 'a' | 441 var local = 'a' |
442 " def Append(arg: string) | 442 def Append(arg: string) |
443 " local ..= arg | 443 local ..= arg |
444 " enddef | 444 enddef |
445 " g:Append = Append | 445 g:Append = Append |
446 " def Get(): string | 446 def Get(): string |
447 " return local | 447 return local |
448 " enddef | 448 enddef |
449 " g:Get = Get | 449 g:Get = Get |
450 "enddef | 450 enddef |
451 " | 451 |
452 "def Test_disassemble_closure() | 452 def Test_disassemble_closure() |
453 " CreateRefs() | 453 CreateRefs() |
454 " var res = execute('disass g:Append') | 454 var res = execute('disass g:Append') |
455 " assert_match('<lambda>\d\_s*' .. | 455 assert_match('<lambda>\d\_s*' .. |
456 " 'local ..= arg\_s*' .. | 456 'local ..= arg\_s*' .. |
457 " '\d LOADOUTER $0\_s*' .. | 457 '\d LOADOUTER $0\_s*' .. |
458 " '\d LOAD arg\[-1\]\_s*' .. | 458 '\d LOAD arg\[-1\]\_s*' .. |
459 " '\d CONCAT\_s*' .. | 459 '\d CONCAT\_s*' .. |
460 " '\d STOREOUTER $0\_s*' .. | 460 '\d STOREOUTER $0\_s*' .. |
461 " '\d PUSHNR 0\_s*' .. | 461 '\d PUSHNR 0\_s*' .. |
462 " '\d RETURN', | 462 '\d RETURN', |
463 " res) | 463 res) |
464 " | 464 |
465 " res = execute('disass g:Get') | 465 res = execute('disass g:Get') |
466 " assert_match('<lambda>\d\_s*' .. | 466 assert_match('<lambda>\d\_s*' .. |
467 " 'return local\_s*' .. | 467 'return local\_s*' .. |
468 " '\d LOADOUTER $0\_s*' .. | 468 '\d LOADOUTER $0\_s*' .. |
469 " '\d RETURN', | 469 '\d RETURN', |
470 " res) | 470 res) |
471 " | 471 |
472 " unlet g:Append | 472 unlet g:Append |
473 " unlet g:Get | 473 unlet g:Get |
474 "enddef | 474 enddef |
475 | 475 |
476 | 476 |
477 def EchoArg(arg: string): string | 477 def EchoArg(arg: string): string |
478 return arg | 478 return arg |
479 enddef | 479 enddef |