Mercurial > vim
changeset 24932:afaa7f3aae56 v8.2.3003
patch 8.2.3003: Vim9: closure compiled with wrong compile type
Commit: https://github.com/vim/vim/commit/968a5b62ffd3e08005d907d93eaaf807be466a88
Author: Bram Moolenaar <Bram@vim.org>
Date: Tue Jun 15 19:32:40 2021 +0200
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 https://github.com/vim/vim/issues/8384)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Tue, 15 Jun 2021 19:45:03 +0200 |
parents | 7cefad55cbf8 |
children | 9fea15d25fbf |
files | src/testdir/test_debugger.vim src/version.c src/vim9execute.c |
diffstat | 3 files changed, 31 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- 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
--- 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,
--- 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; - -#ifdef FEAT_PROFILE - if (do_profiling == PROF_YES && ufunc->uf_profiling) - compile_type = CT_PROFILE; -#endif + compiletype_T compile_type = COMPILE_TYPE(ufunc); + if (func_needs_compiling(ufunc, compile_type) && compile_def_function(ufunc, FALSE, compile_type, NULL) == FAIL)