diff libinterp/parse-tree/pt-stmt.cc @ 29457:313b8b897733

revamp handling of breakpoint line positions Use set<int> instead of map<int,int> since we don't assign number IDs to breakpoints, we just use line numbers. Allow breakpoint functions to accept individual line number arguments. Simplify iteration over sets of breakpoint lines. * debug.cc (bp_lines_to_ov): Rename from intmap_to_ov. * bp-table.h, bp-table.cc (bp_table::bp_lines): New typedef to replace bp_table::intmap. Change all uses. (bp_table::add_breakpoint, bp_table::remove_breakpoint): New overloads that accept single lines as integers instead of requiring a set of lines.
author John W. Eaton <jwe@octave.org>
date Wed, 03 Mar 2021 23:57:31 -0500
parents 0a5b15007766
children a61e1a0f6024
line wrap: on
line diff
--- a/libinterp/parse-tree/pt-stmt.cc	Sun Mar 21 10:53:11 2021 +0100
+++ b/libinterp/parse-tree/pt-stmt.cc	Wed Mar 03 23:57:31 2021 -0500
@@ -249,49 +249,45 @@
   // Updates GUI via  event_manager::update_breakpoint.
   // FIXME: COME BACK TO ME.
 
-  bp_table::intmap
+  bp_table::bp_lines
   tree_statement_list::add_breakpoint (event_manager& evmgr,
                                        const std::string& file,
-                                       const bp_table::intmap& line,
+                                       const bp_table::bp_lines& lines,
                                        const std::string& condition)
   {
-    bp_table::intmap retval;
-
-    octave_idx_type len = line.size ();
+    bp_table::bp_lines retval;
 
-    for (int i = 0; i < len; i++)
+    for (const auto& lineno : lines)
       {
-        bp_table::const_intmap_iterator p = line.find (i);
+        int line = set_breakpoint (lineno, condition);
 
-        if (p != line.end ())
+        if (line)
           {
-            int lineno = p->second;
+            if (! file.empty ())
+              evmgr.update_breakpoint (true, file, line, condition);
 
-            retval[i] = set_breakpoint (lineno, condition);
-
-            if (retval[i] != 0 && ! file.empty ())
-              evmgr.update_breakpoint (true, file, retval[i], condition);
+            retval.insert (line);
           }
       }
 
     return retval;
   }
 
-  bp_table::intmap
+  bp_table::bp_lines
   tree_statement_list::remove_all_breakpoints (event_manager& evmgr,
                                                const std::string& file)
   {
-    bp_table::intmap retval;
+    bp_table::bp_lines retval;
 
     octave_value_list bkpts = list_breakpoints ();
 
     for (int i = 0; i < bkpts.length (); i++)
       {
-        int lineno = static_cast<int> (bkpts(i).int_value ());
+        int lineno = bkpts(i).int_value ();
 
         delete_breakpoint (lineno);
 
-        retval[i] = lineno;
+        retval.insert (lineno);
 
         if (! file.empty ())
           evmgr.update_breakpoint (false, file, lineno);