diff options
author | Bram Moolenaar <Bram@vim.org> | 2021-06-15 19:32:40 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2021-06-15 19:32:40 +0200 |
commit | 968a5b62ffd3e08005d907d93eaaf807be466a88 (patch) | |
tree | 642aab1b56f105292e528055906c28435d41e8e9 | |
parent | affd0bc626560631f1df2e0f68db2f15dbda47e1 (diff) | |
download | vim-git-968a5b62ffd3e08005d907d93eaaf807be466a88.tar.gz |
patch 8.2.3003: Vim9: closure compiled with wrong compile typev8.2.3003
Problem: Vim9: closure compiled with wrong compile type.
Solution: Use COMPILE_TYPE() when calling a function. (closes #8384)
-rw-r--r-- | src/testdir/test_debugger.vim | 27 | ||||
-rw-r--r-- | src/version.c | 2 | ||||
-rw-r--r-- | 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 @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 3003, +/**/ 3002, /**/ 3001, 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) |