]> granicus.if.org Git - vim/commitdiff
patch 8.2.3003: Vim9: closure compiled with wrong compile type v8.2.3003
authorBram Moolenaar <Bram@vim.org>
Tue, 15 Jun 2021 17:32:40 +0000 (19:32 +0200)
committerBram Moolenaar <Bram@vim.org>
Tue, 15 Jun 2021 17:32:40 +0000 (19:32 +0200)
Problem:    Vim9: closure compiled with wrong compile type.
Solution:   Use COMPILE_TYPE() when calling a function. (closes #8384)

src/testdir/test_debugger.vim
src/version.c
src/vim9execute.c

index 6ee71c3848dd17c4a588508f060d490ff178651a..bbf74258b289d5e2eea93763324330c79b2e5d43 100644 (file)
@@ -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
index 1f757b297e374ae83a55824733d7b379113e88f8..7711978fc864ad3d348c51e001a4d7df875f724a 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    3003,
 /**/
     3002,
 /**/
index b8ecf9b3784becd3e88e59f73517ab9a85b7caa3..96bd24509367bc2ad5a17a294c40eddb643fcbdb 100644 (file)
@@ -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)