changeset 29673:0181e1e5ec67

maint: merge stable to default.
author Rik <rik@octave.org>
date Fri, 14 May 2021 18:13:58 -0700
parents df0f97c4fb18 (current diff) 68d64190da65 (diff)
children fc8d0a32d840
files libinterp/corefcn/debug.cc
diffstat 1 files changed, 9 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/corefcn/debug.cc	Fri May 14 15:19:16 2021 -0700
+++ b/libinterp/corefcn/debug.cc	Fri May 14 18:13:58 2021 -0700
@@ -830,7 +830,7 @@
 
   octave_idx_type curr_frame = -1;
 
-  std::size_t nskip = 0;
+  octave_idx_type nskip = 0;
 
   if (nargin == 1 || nargin == 2)
     {
@@ -913,12 +913,15 @@
     {
       octave_map stk = tw.backtrace (curr_frame, false);
 
-      // If current stack frame is not in the list curr_frame will be
-      // -1 and either nskip caused us to skip it or we are at the top
-      // level, which is not included in the list of frames.  So in the
-      // interpreter, 0 will be our invalid frame index value.
+      octave_idx_type num_skip = std::min (nskip, stk.numel ());
+
+      for (octave_idx_type i = 0; i < num_skip; i++)
+        stk.delete_elements (idx_vector (0));
 
-      retval = ovl (stk, curr_frame + 1);
+      curr_frame -= num_skip;
+      curr_frame = (curr_frame < 0 ? 0 : curr_frame + 1);
+
+      retval = ovl (stk, curr_frame);
     }
 
   return retval;