Change set_locator_info to take a symtab_and_line
authorTom Tromey <tom@tromey.com>
Wed, 13 Nov 2019 22:41:08 +0000 (15:41 -0700)
committerTom Tromey <tom@tromey.com>
Fri, 20 Dec 2019 16:15:56 +0000 (09:15 -0700)
This changes set_locator_info to take a symtab_and_line, rather than
the individual components.

gdb/ChangeLog
2019-12-20  Tom Tromey  <tom@tromey.com>

* tui/tui-stack.h (struct tui_locator_window) <set_locator_info>:
Take a symtab_and_line.
* tui/tui-stack.c (tui_locator_window::set_locator_info): Take a
symtab_and_line.
(tui_show_frame_info): Update.

Change-Id: Icb58d67e6c5bdc034eede9e5bbe8c1d1e633fbb5

gdb/ChangeLog
gdb/tui/tui-stack.c
gdb/tui/tui-stack.h

index 85212286df3eec96fae56e07d8913896929f9fd8..887e04e57dd488cccf0e8980731ce16787ed0539 100644 (file)
@@ -1,3 +1,11 @@
+2019-12-20  Tom Tromey  <tom@tromey.com>
+
+       * tui/tui-stack.h (struct tui_locator_window) <set_locator_info>:
+       Take a symtab_and_line.
+       * tui/tui-stack.c (tui_locator_window::set_locator_info): Take a
+       symtab_and_line.
+       (tui_show_frame_info): Update.
+
 2019-12-20  Tom Tromey  <tom@tromey.com>
 
        * tui/tui-stack.c (tui_show_frame_info): Don't call
index f42bd836d2088b6e3cb3aa8a8c712c29fcd691e3..d2443438596a8f46f0e7d48e2dbf10c930bdb079 100644 (file)
@@ -258,28 +258,26 @@ tui_locator_window::set_locator_fullname (const char *fullname)
 
 bool
 tui_locator_window::set_locator_info (struct gdbarch *gdbarch_in,
-                                     const char *fullname,
-                                     const char *procname, 
-                                     int lineno,
-                                     CORE_ADDR addr_in)
+                                     const struct symtab_and_line &sal,
+                                     const char *procname)
 {
   bool locator_changed_p = false;
 
-  if (procname == NULL)
-    procname = "";
+  gdb_assert (procname != NULL);
 
-  if (fullname == NULL)
-    fullname = "";
+  const char *fullname = (sal.symtab == nullptr
+                         ? "??"
+                         : symtab_to_fullname (sal.symtab));
 
   locator_changed_p |= proc_name != procname;
-  locator_changed_p |= lineno != line_no;
-  locator_changed_p |= addr_in != addr;
+  locator_changed_p |= sal.line != line_no;
+  locator_changed_p |= sal.pc != addr;
   locator_changed_p |= gdbarch_in != gdbarch;
   locator_changed_p |= full_name != fullname;
 
   proc_name = procname;
-  line_no = lineno;
-  addr = addr_in;
+  line_no = sal.line;
+  addr = sal.pc;
   gdbarch = gdbarch_in;
   set_locator_fullname (fullname);
 
@@ -314,26 +312,18 @@ tui_show_frame_info (struct frame_info *fi)
 
   if (fi)
     {
-      CORE_ADDR pc;
-
       symtab_and_line sal = find_frame_sal (fi);
 
-      const char *fullname = nullptr;
-      if (sal.symtab != nullptr)
-       fullname = symtab_to_fullname (sal.symtab);
-
-      if (get_frame_pc_if_available (fi, &pc))
-       locator_changed_p
-         = locator->set_locator_info (get_frame_arch (fi),
-                                      (sal.symtab == 0
-                                       ? "??" : fullname),
-                                      tui_get_function_from_frame (fi),
-                                      sal.line,
-                                      pc);
+      const char *func_name;
+      /* find_frame_sal does not always set PC, but we want to ensure
+        that it is available in the SAL.  */
+      if (get_frame_pc_if_available (fi, &sal.pc))
+       func_name = tui_get_function_from_frame (fi);
       else
-       locator_changed_p
-         = locator->set_locator_info (get_frame_arch (fi),
-                                      "??", _("<unavailable>"), sal.line, 0);
+       func_name = _("<unavailable>");
+
+      locator_changed_p = locator->set_locator_info (get_frame_arch (fi),
+                                                    sal, func_name);
 
       /* If the locator information has not changed, then frame information has
         not changed.  If frame information has not changed, then the windows'
@@ -341,10 +331,6 @@ tui_show_frame_info (struct frame_info *fi)
       if (!locator_changed_p)
        return 0;
 
-      /* find_frame_sal does not always set PC, but we want to ensure
-        that it is available in the SAL.  */
-      sal.pc = pc;
-
       for (struct tui_source_window_base *win_info : tui_source_windows ())
        {
          win_info->maybe_update (fi, sal);
@@ -355,8 +341,9 @@ tui_show_frame_info (struct frame_info *fi)
     }
   else
     {
-      locator_changed_p
-       = locator->set_locator_info (NULL, NULL, NULL, 0, (CORE_ADDR) 0);
+      symtab_and_line sal {};
+
+      locator_changed_p = locator->set_locator_info (NULL, sal, "");
 
       if (!locator_changed_p)
        return 0;
index 97e6956029e73b30bd0605031ec2af27f8ecac19..3bfe529244c6b2324b4f592c84418c4856d31e13 100644 (file)
@@ -54,9 +54,8 @@ struct tui_locator_window : public tui_gen_win_info
      Returns true if any of the locator's fields were actually
      changed, and false otherwise.  */
   bool set_locator_info (struct gdbarch *gdbarch,
-                        const char *fullname,
-                        const char *procname,
-                        int lineno, CORE_ADDR addr);
+                        const struct symtab_and_line &sal,
+                        const char *procname);
 
   /* Set the full_name portion of the locator.  */
   void set_locator_fullname (const char *fullname);