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)