]> granicus.if.org Git - vim/commitdiff
patch 8.2.3066: Vim9: debugging lambda does not work v8.2.3066
authorBram Moolenaar <Bram@vim.org>
Sun, 27 Jun 2021 14:29:53 +0000 (16:29 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 27 Jun 2021 14:29:53 +0000 (16:29 +0200)
Problem:    Vim9: debugging lambda does not work.
Solution:   Use the compile type of the function when compiling a lambda.
            (closes #8412)

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

index 4601319f8debf6242a26071e444af0feb2cdfb1e..dbf2000462242364e7ad4bf1308f732429fc30a4 100644 (file)
@@ -932,7 +932,7 @@ func Test_Backtrace_DefFunction()
   call delete('Xtest2.vim')
 endfunc
 
-func Test_debug_DefFunction()
+func Test_debug_def_and_legacy_function()
   CheckCWD
   let file =<< trim END
     vim9script
@@ -1068,6 +1068,33 @@ func Test_debug_def_function()
   call delete('Xtest.vim')
 endfunc
 
+func Test_debug_def_function_with_lambda()
+  CheckCWD
+  let lines =<< trim END
+     vim9script
+     def g:Func()
+       var s = 'a'
+       ['b']->map((_, v) => s)
+       echo "done"
+     enddef
+     breakadd func 2 g:Func
+  END
+  call writefile(lines, 'XtestLambda.vim')
+
+  let buf = RunVimInTerminal('-S XtestLambda.vim', {})
+
+  call RunDbgCmd(buf,
+                \ ':call g:Func()',
+                \ ['function Func', 'line 2: [''b'']->map((_, v) => s)'])
+  call RunDbgCmd(buf,
+                \ 'next',
+                \ ['function Func', 'line 3: echo "done"'])
+
+  call RunDbgCmd(buf, 'cont')
+  call StopVimInTerminal(buf)
+  call delete('XtestLambda.vim')
+endfunc
+
 func Test_debug_backtrace_level()
   CheckCWD
   let lines =<< trim END
index d07a3208560cb120b71e5c6da2547c19cd8fe285..9bb7c4f9816683c3921665a86150868b9661251c 100644 (file)
@@ -755,6 +755,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    3066,
 /**/
     3065,
 /**/
index e746ea9d3d95c6ed0ea8607804c8cab4eb6713e2..c5758cc182d666ec8f67d8483b4e479717f0b0fd 100644 (file)
@@ -3622,7 +3622,7 @@ compile_lambda(char_u **arg, cctx_T *cctx)
     // compile_return().
     if (ufunc->uf_ret_type->tt_type == VAR_VOID)
        ufunc->uf_ret_type = &t_unknown;
-    compile_def_function(ufunc, FALSE, COMPILE_TYPE(ufunc), cctx);
+    compile_def_function(ufunc, FALSE, cctx->ctx_compile_type, cctx);
 
     // evalarg.eval_tofree_cmdline may have a copy of the last line and "*arg"
     // points into it.  Point to the original line to avoid a dangling pointer.