# HG changeset patch # User Bram Moolenaar # Date 1624212902 -7200 # Node ID 2cb78583fada095dd36b366ec308546afb8eafac # Parent 6ed6f1eef4376f9da6c91111b16685c02067254d patch 8.2.3027: Vim9: breakpoint in compiled function not always checked Commit: https://github.com/vim/vim/commit/2ac4b2536a40e5cd75b4ff7a3d44a282d2f4f008 Author: Bram Moolenaar Date: Sun Jun 20 20:09:42 2021 +0200 patch 8.2.3027: Vim9: breakpoint in compiled function not always checked Problem: Vim9: breakpoint in compiled function not always checked. Solution: Check for breakpoint when calling compiled function from compiled function. diff --git a/src/testdir/test_debugger.vim b/src/testdir/test_debugger.vim --- a/src/testdir/test_debugger.vim +++ b/src/testdir/test_debugger.vim @@ -940,7 +940,22 @@ func Test_debug_DefFunction() echo "here" echo "and" echo "there" + breakadd func 2 LocalFunc + LocalFunc() enddef + + def LocalFunc() + echo "first" + echo "second" + breakadd func 1 LegacyFunc + LegacyFunc() + enddef + + func LegacyFunc() + echo "legone" + echo "legtwo" + endfunc + breakadd func 2 g:SomeFunc END call writefile(file, 'XtestDebug.vim') @@ -949,6 +964,13 @@ func Test_debug_DefFunction() call RunDbgCmd(buf,':call SomeFunc()', ['line 2: echo "and"']) call RunDbgCmd(buf,'next', ['line 3: echo "there"']) + call RunDbgCmd(buf,'next', ['line 4: breakadd func 2 LocalFunc']) + + " continue, next breakpoint is in LocalFunc() + call RunDbgCmd(buf,'cont', ['line 2: echo "second"']) + + " continue, next breakpoint is in LegacyFunc() + call RunDbgCmd(buf,'cont', ['line 1: echo "legone"']) call RunDbgCmd(buf, 'cont') diff --git a/src/version.c b/src/version.c --- 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 */ /**/ + 3027, +/**/ 3026, /**/ 3025, diff --git a/src/vim9execute.c b/src/vim9execute.c --- a/src/vim9execute.c +++ b/src/vim9execute.c @@ -229,6 +229,9 @@ call_dfunc( } #endif + // Update uf_has_breakpoint if needed. + update_has_breakpoint(ufunc); + // When debugging and using "cont" switches to the not-debugged // instructions, may need to still compile them. if ((func_needs_compiling(ufunc, COMPILE_TYPE(ufunc))