changeset 25059:671ded1facd5

patch 8.2.3066: Vim9: debugging lambda does not work Commit: https://github.com/vim/vim/commit/17d868b8b268c9b9670421039d1a772341937add Author: Bram Moolenaar <Bram@vim.org> Date: Sun Jun 27 16:29:53 2021 +0200 patch 8.2.3066: Vim9: debugging lambda does not work Problem: Vim9: debugging lambda does not work. Solution: Use the compile type of the function when compiling a lambda. (closes #8412)
author Bram Moolenaar <Bram@vim.org>
date Sun, 27 Jun 2021 16:30:04 +0200
parents 2bf78a07dd43
children 54c0cb81e6a7
files src/testdir/test_debugger.vim src/version.c src/vim9compile.c
diffstat 3 files changed, 31 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/testdir/test_debugger.vim
+++ b/src/testdir/test_debugger.vim
@@ -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
--- a/src/version.c
+++ b/src/version.c
@@ -756,6 +756,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    3066,
+/**/
     3065,
 /**/
     3064,
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -3622,7 +3622,7 @@ compile_lambda(char_u **arg, cctx_T *cct
     // 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.