patch 8.2.1656: Vim9: callstack wrong if :def function calls :def function
Problem: Vim9: callstack wrong if :def function calls :def function.
Solution: Set the line number before calling. (closes #6914)
diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim
index ae8f329..4e79c89 100644
--- a/src/testdir/test_vim9_func.vim
+++ b/src/testdir/test_vim9_func.vim
@@ -1776,5 +1776,25 @@
assert_equal('', g:ei_after)
enddef
+def StackTop()
+ eval 1
+ eval 2
+ # call not on fourth line
+ StackBot()
+enddef
+
+def StackBot()
+ # throw an error
+ eval [][0]
+enddef
+
+def Test_callstack_def()
+ try
+ StackTop()
+ catch
+ assert_match('Test_callstack_def\[2\]..StackTop\[4\]..StackBot, line 2', v:throwpoint)
+ endtry
+enddef
+
" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker
diff --git a/src/version.c b/src/version.c
index 2628ed6..7aa35c2 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1656,
+/**/
1655,
/**/
1654,
diff --git a/src/vim9execute.c b/src/vim9execute.c
index 76cafb4..18cfb02 100644
--- a/src/vim9execute.c
+++ b/src/vim9execute.c
@@ -1665,6 +1665,7 @@
// call a :def function
case ISN_DCALL:
+ SOURCING_LNUM = iptr->isn_lnum;
if (call_dfunc(iptr->isn_arg.dfunc.cdf_idx,
iptr->isn_arg.dfunc.cdf_argcount,
&ectx) == FAIL)