diff --git a/src/testdir/test_vim9_fails.vim b/src/testdir/test_vim9_fails.vim index 5c3cab545e42a..9d4337023592c 100644 --- a/src/testdir/test_vim9_fails.vim +++ b/src/testdir/test_vim9_fails.vim @@ -26,3 +26,37 @@ def Test_job_info_return_type() endif enddef +" Using "idx" from a legacy global function does not work. +" This caused a crash when called from legacy context. +" This creates a dict that contains a partial that refers to the dict, causing +" valgrind to report "possibly leaked memory". +func Test_partial_call_fails() + let lines =<< trim END + vim9script + + var l = ['a', 'b', 'c'] + def Iter(container: any): any + var idx = -1 + var obj = {state: container} + def g:NextItem__(self: dict): any + ++idx + return self.state[idx] + enddef + obj.__next__ = function('g:NextItem__', [obj]) + return obj + enddef + + var it = Iter(l) + echo it.__next__() + END + call writefile(lines, 'XpartialCall', 'D') + let caught = 'no' + try + source XpartialCall + catch /E1248:/ + let caught = 'yes' + endtry + call assert_equal('yes', caught) + delfunc g:NextItem__ +endfunc + diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim index dc6b10439fd83..a0c5e49757d6c 100644 --- a/src/testdir/test_vim9_func.vim +++ b/src/testdir/test_vim9_func.vim @@ -3532,34 +3532,6 @@ def Test_partial_null_function() v9.CheckDefAndScriptSuccess(lines) enddef -" Using "idx" from a legacy global function does not work. -" This caused a crash when called from legacy context. -func Test_partial_call_fails() - let lines =<< trim END - vim9script - - var l = ['a', 'b', 'c'] - def Iter(container: any): any - var idx = -1 - var obj = {state: container} - def g:NextItem__(self: dict): any - ++idx - return self.state[idx] - enddef - obj.__next__ = function('g:NextItem__', [obj]) - return obj - enddef - - var it = Iter(l) - echo it.__next__() - END - call writefile(lines, 'XpartialCall', 'D') - try - source XpartialCall - catch /E1248:/ - endtry -endfunc - def Test_cmd_modifier() tab echo '0' v9.CheckDefFailure(['5tab echo 3'], 'E16:') diff --git a/src/version.c b/src/version.c index 8df30bd161942..f01afe3862beb 100644 --- a/src/version.c +++ b/src/version.c @@ -699,6 +699,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 557, /**/ 556, /**/