changeset 22214:efa1511a5bf3 v8.2.1656

patch 8.2.1656: Vim9: callstack wrong if :def function calls :def function Commit: https://github.com/vim/vim/commit/dfa3d5524e816c1ff7f603f9f3b7703a53a0f822 Author: Bram Moolenaar <Bram@vim.org> Date: Thu Sep 10 22:05:08 2020 +0200 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 https://github.com/vim/vim/issues/6914)
author Bram Moolenaar <Bram@vim.org>
date Thu, 10 Sep 2020 22:15:03 +0200
parents 77d2faafb9c6
children c22b939fc581
files src/testdir/test_vim9_func.vim src/version.c src/vim9execute.c
diffstat 3 files changed, 23 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/testdir/test_vim9_func.vim
+++ b/src/testdir/test_vim9_func.vim
@@ -1776,5 +1776,25 @@ def Test_restore_modifiers()
   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
--- 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 */
 /**/
+    1656,
+/**/
     1655,
 /**/
     1654,
--- a/src/vim9execute.c
+++ b/src/vim9execute.c
@@ -1665,6 +1665,7 @@ call_def_function(
 
 	    // 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)