Mercurial > hg > octave-nkf
changeset 18508:96a495813047
Don't put parent function in subfunction stack structure name (bug #41506).
* debug.cc (do_dbstack): When returning a structure, call
octave_call_stack::backtrace with print_subfn set to false.
* toplev.h (octave_call_stack::backtrace): Create new 2 argument function
signature which calls do_backtrace with print_subfn set to true. Create
new 3 argument function signature which passes print_subfn argument through
to do_backtrace.
* toplev.cc (octave_call_stack::do_backtrace): Change function to accept
3rd argument, print_subfn, which decides whether the parent function
should be printed in the name field of the backtrace.
author | Rik <rik@octave.org> |
---|---|
date | Sat, 08 Feb 2014 14:44:21 -0800 |
parents | d5aa615dcf4c |
children | b0aba84cf80f |
files | libinterp/corefcn/debug.cc libinterp/corefcn/toplev.cc libinterp/corefcn/toplev.h |
diffstat | 3 files changed, 20 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/libinterp/corefcn/debug.cc +++ b/libinterp/corefcn/debug.cc @@ -1224,10 +1224,9 @@ if (! error_state) { - octave_map stk = octave_call_stack::backtrace (nskip, curr_frame); - if (nargout == 0) { + octave_map stk = octave_call_stack::backtrace (nskip, curr_frame); octave_idx_type nframes_to_display = stk.numel (); if (nframes_to_display > 0) @@ -1273,6 +1272,10 @@ } else { + octave_map stk = octave_call_stack::backtrace (nskip, + curr_frame, + false); + retval(1) = curr_frame < 0 ? 1 : curr_frame + 1; retval(0) = stk; }
--- a/libinterp/corefcn/toplev.cc +++ b/libinterp/corefcn/toplev.cc @@ -301,7 +301,8 @@ octave_map octave_call_stack::do_backtrace (size_t nskip, - octave_idx_type& curr_user_frame) const + octave_idx_type& curr_user_frame, + bool print_subfn) const { size_t user_code_frames = do_num_user_code_frames (curr_user_frame); @@ -340,7 +341,7 @@ file(k) = f->fcn_file_name (); std::string parent_fcn_name = f->parent_fcn_name (); - if (parent_fcn_name == std::string ()) + if (! print_subfn || parent_fcn_name == std::string ()) name(k) = f->name (); else name(k) = f->parent_fcn_name () + Vfilemarker + f->name ();
--- a/libinterp/corefcn/toplev.h +++ b/libinterp/corefcn/toplev.h @@ -278,7 +278,16 @@ static octave_map backtrace (size_t nskip, octave_idx_type& curr_user_frame) { return instance_ok () - ? instance->do_backtrace (nskip, curr_user_frame) : octave_map (); + ? instance->do_backtrace (nskip, curr_user_frame, true) + : octave_map (); + } + + static octave_map backtrace (size_t nskip, octave_idx_type& curr_user_frame, + bool print_subfn) + { + return instance_ok () + ? instance->do_backtrace (nskip, curr_user_frame, print_subfn) + : octave_map (); } static octave_map empty_backtrace (void); @@ -414,7 +423,8 @@ } octave_map do_backtrace (size_t nskip, - octave_idx_type& curr_user_frame) const; + octave_idx_type& curr_user_frame, + bool print_subfn) const; bool do_goto_frame (size_t n, bool verbose);