# HG changeset patch # User John W. Eaton # Date 1389128841 18000 # Node ID e42d4f1527660a8153cb44fc64bff5fddb42dcc7 # Parent 0eeab61e07d87cf5a6e294cf03efde60e3f28712# Parent f26d527c1a71c8a24bc4b2b9523a96858d1196a6 maint: Periodic merge of stable to gui-release. diff -r 0eeab61e07d8 -r e42d4f152766 libgui/src/m-editor/file-editor-tab.cc --- a/libgui/src/m-editor/file-editor-tab.cc Tue Jan 07 21:50:34 2014 +0100 +++ b/libgui/src/m-editor/file-editor-tab.cc Tue Jan 07 16:07:21 2014 -0500 @@ -51,6 +51,8 @@ #include "file-editor-tab.h" #include "file-editor.h" +#include "file-ops.h" + #include "debug.h" #include "octave-qt-link.h" #include "version.h" @@ -616,17 +618,40 @@ bp_table::remove_all_breakpoints_in_file (info.function_name, true); } +file_editor_tab::bp_info::bp_info (const QString& fname, int l) + : line (l), file (fname.toStdString ()) +{ + QFileInfo file_info (fname); + + QString q_dir = file_info.absolutePath (); + QString q_function_name = file_info.fileName (); + + // We have to cut off the suffix, because octave appends it. + q_function_name.chop (file_info.suffix ().length () + 1); + + dir = q_dir.toStdString (); + function_name = q_function_name.toStdString (); + + // Is the last component of DIR @foo? If so, strip it and prepend it + // to the name of the function. + + size_t pos = dir.rfind (file_ops::dir_sep_chars ()); + + if (pos != std::string::npos && pos < dir.length () - 1) + { + if (dir[pos+1] == '@') + { + function_name = file_ops::concat (dir.substr (pos+1), function_name); + + dir = dir.substr (0, pos); + } + } +} + void file_editor_tab::request_add_breakpoint (int line) { - QFileInfo file_info (_file_name); - QString dir = file_info.absolutePath (); - QString function_name = file_info.fileName (); - - // We have to cut off the suffix, because octave appends it. - function_name.chop (file_info.suffix ().length () + 1); - - bp_info info (_file_name, dir, function_name, line+1); + bp_info info (_file_name, line+1); octave_link::post_event (this, &file_editor_tab::add_breakpoint_callback, info); @@ -635,14 +660,7 @@ void file_editor_tab::request_remove_breakpoint (int line) { - QFileInfo file_info (_file_name); - QString dir = file_info.absolutePath (); - QString function_name = file_info.fileName (); - - // We have to cut off the suffix, because octave appends it. - function_name.chop (file_info.suffix ().length () + 1); - - bp_info info (_file_name, dir, function_name, line+1); + bp_info info (_file_name, line+1); octave_link::post_event (this, &file_editor_tab::remove_breakpoint_callback, info); @@ -703,14 +721,7 @@ if (ID != this) return; - QFileInfo file_info (_file_name); - QString dir = file_info.absolutePath (); - QString function_name = file_info.fileName (); - - // We have to cut off the suffix, because octave appends it. - function_name.chop (file_info.suffix ().length () + 1); - - bp_info info (_file_name, dir, function_name, 0); + bp_info info (_file_name); octave_link::post_event (this, &file_editor_tab::remove_all_breakpoints_callback, info); diff -r 0eeab61e07d8 -r e42d4f152766 libgui/src/m-editor/file-editor-tab.h --- a/libgui/src/m-editor/file-editor-tab.h Tue Jan 07 21:50:34 2014 +0100 +++ b/libgui/src/m-editor/file-editor-tab.h Tue Jan 07 16:07:21 2014 -0500 @@ -165,15 +165,12 @@ struct bp_info { - bp_info (const QString& f, const QString& d, const QString& fn, int l) - : file (f.toStdString ()), dir (d.toStdString ()), - function_name (fn.toStdString ()), line (l) - { } + bp_info (const QString& fname, int l = 0); + int line; std::string file; std::string dir; std::string function_name; - int line; }; bool valid_file_name (const QString& file=QString ()); diff -r 0eeab61e07d8 -r e42d4f152766 libinterp/corefcn/debug.cc --- a/libinterp/corefcn/debug.cc Tue Jan 07 21:50:34 2014 +0100 +++ b/libinterp/corefcn/debug.cc Tue Jan 07 16:07:21 2014 -0500 @@ -178,7 +178,14 @@ dbg_fcn = octave_call_stack::caller_user_code (); else { - octave_value fcn = symbol_table::find_function (fname); + std::string name = fname; + + size_t name_len = name.length (); + + if (! name.empty () && name_len > 2 && name.substr (name_len-2) == ".m") + name = name.substr (0, name_len-2); + + octave_value fcn = symbol_table::find_function (name); if (fcn.is_defined () && fcn.is_user_code ()) dbg_fcn = fcn.user_code_value ();