From 968a5b62ffd3e08005d907d93eaaf807be466a88 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Tue, 15 Jun 2021 19:32:40 +0200 Subject: patch 8.2.3003: Vim9: closure compiled with wrong compile type Problem: Vim9: closure compiled with wrong compile type. Solution: Use COMPILE_TYPE() when calling a function. (closes #8384) --- src/testdir/test_debugger.vim | 27 +++++++++++++++++++++++++++ src/version.c | 2 ++ src/vim9execute.c | 6 +----- 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/testdir/test_debugger.vim b/src/testdir/test_debugger.vim index 6ee71c384..bbf74258b 100644 --- a/src/testdir/test_debugger.vim +++ b/src/testdir/test_debugger.vim @@ -932,6 +932,33 @@ func Test_Backtrace_DefFunction() call delete('Xtest2.vim') endfunc +func Test_debug_def_function() + CheckCWD + let file =<< trim END + vim9script + def g:Func() + var n: number + def Closure(): number + return n + 3 + enddef + n += Closure() + echo 'result: ' .. n + enddef + END + call writefile(file, 'Xtest.vim') + + let buf = RunVimInTerminal('-S Xtest.vim', {}) + + call RunDbgCmd(buf, + \ ':debug call Func()', + \ ['cmd: call Func()']) + call RunDbgCmd(buf, 'next', ['result: 3']) + call term_sendkeys(buf, "\r") + + call StopVimInTerminal(buf) + call delete('Xtest.vim') +endfunc + func Test_debug_backtrace_level() CheckCWD let lines =<< trim END diff --git a/src/version.c b/src/version.c index 1f757b297..7711978fc 100644 --- a/src/version.c +++ b/src/version.c @@ -750,6 +750,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 3003, /**/ 3002, /**/ diff --git a/src/vim9execute.c b/src/vim9execute.c index b8ecf9b37..96bd24509 100644 --- a/src/vim9execute.c +++ b/src/vim9execute.c @@ -752,12 +752,8 @@ call_ufunc( int error; int idx; int did_emsg_before = did_emsg; - compiletype_T compile_type = CT_NONE; + compiletype_T compile_type = COMPILE_TYPE(ufunc); -#ifdef FEAT_PROFILE - if (do_profiling == PROF_YES && ufunc->uf_profiling) - compile_type = CT_PROFILE; -#endif if (func_needs_compiling(ufunc, compile_type) && compile_def_function(ufunc, FALSE, compile_type, NULL) == FAIL) -- cgit v1.2.1