# HG changeset patch # User Bram Moolenaar # Date 1599768903 -7200 # Node ID efa1511a5bf3e835a953131c3e4916f27f7b9743 # Parent 77d2faafb9c610691cc747b776250c152e535028 patch 8.2.1656: Vim9: callstack wrong if :def function calls :def function Commit: https://github.com/vim/vim/commit/dfa3d5524e816c1ff7f603f9f3b7703a53a0f822 Author: Bram Moolenaar 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) diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim --- 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 diff --git a/src/version.c b/src/version.c --- 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, diff --git a/src/vim9execute.c b/src/vim9execute.c --- 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)