Commit Message
This removes the tui_list type in favor of a std::vector.
gdb/ChangeLog
2019-06-23 Tom Tromey <tom@tromey.com>
* tui/tui-winsource.c (tui_display_main)
(tui_update_source_windows_with_addr)
(tui_update_all_breakpoint_info): Update.
* tui/tui-win.c (tui_resize_all, tui_adjust_win_heights)
(new_height_ok, parse_scrolling_args): Update.
* tui/tui-stack.c (tui_show_frame_info): Update.
* tui/tui-data.h (struct tui_list): Remove.
(tui_source_windows): Return a reference to a std::vector.
* tui/tui-data.c (source_windows): Now a std::vector.
(tui_source_windows): Change return type.
(tui_clear_source_windows): Rewrite.
(tui_clear_source_windows_detail, tui_add_to_source_windows)
(tui_free_all_source_wins_content): Rewrite.
---
gdb/ChangeLog | 16 ++++++++++++++++
gdb/tui/tui-data.c | 42 +++++++++++++++--------------------------
gdb/tui/tui-data.h | 10 +---------
gdb/tui/tui-stack.c | 10 +++-------
gdb/tui/tui-win.c | 14 +++++++-------
gdb/tui/tui-winsource.c | 19 +++++--------------
6 files changed, 47 insertions(+), 64 deletions(-)
Comments
On 6/23/19 11:42 PM, Tom Tromey wrote:
> -static struct tui_list source_windows = {src_win_list, 0};
> +static struct std::vector<tui_win_info *> source_windows;
I usually prefer to drop "struct", but I can live with it.
However, I have to say that "struct std::vector" looks weird. :-)
(There are other instances in the patch.)
Thanks,
Pedro Alves
Hello,
On Mon, 24 Jun 2019 at 17:12, Pedro Alves <palves@redhat.com> wrote:
>
> On 6/23/19 11:42 PM, Tom Tromey wrote:
> > -static struct tui_list source_windows = {src_win_list, 0};
> > +static struct std::vector<tui_win_info *> source_windows;
>
> I usually prefer to drop "struct", but I can live with it.
>
> However, I have to say that "struct std::vector" looks weird. :-)
BTW, if you compile a declaration like "struct
std::vector<tui_win_info*> source_windows;" with clang++ (with -Wall
option), you'll get a warning "struct 'vector' was previously declared
as a class [-Wmismatched-tags]", so it's better to either drop the
"struct" or change it to "class".
>
> (There are other instances in the patch.)
>
> Thanks,
> Pedro Alves
Regards,
Ruslan
On 6/24/19 4:11 PM, Ruslan Kabatsayev wrote:
> BTW, if you compile a declaration like "struct
> std::vector<tui_win_info*> source_windows;" with clang++ (with -Wall
> option), you'll get a warning "struct 'vector' was previously declared
> as a class [-Wmismatched-tags]", so it's better to either drop the
> "struct" or change it to "class".
GDB actually disables that warning explicitly, with -Wno-mismatched-tags
(gdb/warning.m4).
The mismatch is only important for MS's Visual Studio, since although
the C++ standard says struct and class are the same, IIRC Visual Studio
mangles struct vs class differently. But, AFAIK, no one ever builds
GDB with Visual Studio. At least, I've not heard of anyone
attempting it, though I guess it might be possible nowadays, with
Visual Studio offering much better standard C++ compliance than it used to.
Thanks,
Pedro Alves
>>>>> "Pedro" == Pedro Alves <palves@redhat.com> writes:
Pedro> On 6/23/19 11:42 PM, Tom Tromey wrote:
>> -static struct tui_list source_windows = {src_win_list, 0};
>> +static struct std::vector<tui_win_info *> source_windows;
Pedro> I usually prefer to drop "struct", but I can live with it.
Pedro> However, I have to say that "struct std::vector" looks weird. :-)
Pedro> (There are other instances in the patch.)
This was just an oversight when search/replacing.
I've fixed it.
Tom
@@ -38,8 +38,7 @@ static enum tui_layout_type current_layout = UNDEFINED_LAYOUT;
static int term_height, term_width;
static struct tui_gen_win_info _locator;
static struct tui_gen_win_info exec_info[2];
-static struct tui_win_info *src_win_list[2];
-static struct tui_list source_windows = {src_win_list, 0};
+static struct std::vector<tui_win_info *> source_windows;
static struct tui_win_info *win_with_focus = NULL;
static struct tui_layout_def layout_def = {
SRC_WIN, /* DISPLAY_MODE */
@@ -138,10 +137,10 @@ tui_set_win_with_focus (struct tui_win_info *win_info)
/* Accessor for the current source window. Usually there is only one
source window (either source or disassembly), but both can be
displayed at the same time. */
-struct tui_list *
-tui_source_windows (void)
+struct std::vector<tui_win_info *> &
+tui_source_windows ()
{
- return &source_windows;
+ return source_windows;
}
@@ -149,22 +148,18 @@ tui_source_windows (void)
window (either source or disassembly), but both can be displayed at
the same time. */
void
-tui_clear_source_windows (void)
+tui_clear_source_windows ()
{
- source_windows.list[0] = NULL;
- source_windows.list[1] = NULL;
- source_windows.count = 0;
+ source_windows.clear ();
}
/* Clear the pertinant detail in the source windows. */
void
-tui_clear_source_windows_detail (void)
+tui_clear_source_windows_detail ()
{
- int i;
-
- for (i = 0; i < (tui_source_windows ())->count; i++)
- tui_clear_win_detail ((tui_source_windows ())->list[i]);
+ for (tui_win_info *win : tui_source_windows ())
+ tui_clear_win_detail (win);
}
@@ -174,8 +169,8 @@ tui_clear_source_windows_detail (void)
void
tui_add_to_source_windows (struct tui_win_info *win_info)
{
- if (source_windows.count < 2)
- source_windows.list[source_windows.count++] = win_info;
+ if (source_windows.size () < 2)
+ source_windows.push_back (win_info);
}
/* See tui-data.h. */
@@ -675,19 +670,12 @@ tui_win_info::~tui_win_info ()
void
-tui_free_all_source_wins_content (void)
+tui_free_all_source_wins_content ()
{
- int i;
-
- for (i = 0; i < (tui_source_windows ())->count; i++)
+ for (tui_win_info *win_info : tui_source_windows ())
{
- struct tui_win_info *win_info = (tui_source_windows ())->list[i];
-
- if (win_info != NULL)
- {
- tui_free_win_content (&(win_info->generic));
- tui_free_win_content (win_info->detail.source_info.execution_info);
- }
+ tui_free_win_content (&(win_info->generic));
+ tui_free_win_content (win_info->detail.source_info.execution_info);
}
}
@@ -102,14 +102,6 @@ enum tui_scroll_direction
};
-/* General list struct. */
-struct tui_list
-{
- struct tui_win_info **list;
- int count;
-};
-
-
/* The kinds of layouts available. */
enum tui_layout_type
{
@@ -360,7 +352,7 @@ extern void tui_set_term_width_to (int);
extern struct tui_gen_win_info *tui_locator_win_info_ptr (void);
extern struct tui_gen_win_info *tui_source_exec_info_win_ptr (void);
extern struct tui_gen_win_info *tui_disassem_exec_info_win_ptr (void);
-extern struct tui_list *tui_source_windows (void);
+extern struct std::vector<tui_win_info *> &tui_source_windows ();
extern void tui_clear_source_windows (void);
extern void tui_clear_source_windows_detail (void);
extern void tui_clear_win_detail (struct tui_win_info *);
@@ -360,12 +360,11 @@ tui_update_locator_fullname (const char *fullname)
int
tui_show_frame_info (struct frame_info *fi)
{
- struct tui_win_info *win_info;
int locator_changed_p;
if (fi)
{
- int start_line, i;
+ int start_line;
CORE_ADDR low;
struct tui_gen_win_info *locator = tui_locator_win_info_ptr ();
int source_already_displayed;
@@ -397,12 +396,10 @@ tui_show_frame_info (struct frame_info *fi)
tui_show_locator_content ();
start_line = 0;
- for (i = 0; i < (tui_source_windows ())->count; i++)
+ for (struct tui_win_info *win_info : tui_source_windows ())
{
union tui_which_element *item;
- win_info = (tui_source_windows ())->list[i];
-
item = &locator->content[0]->which_element;
if (win_info == TUI_SRC_WIN)
{
@@ -475,9 +472,8 @@ tui_show_frame_info (struct frame_info *fi)
return 0;
tui_show_locator_content ();
- for (int i = 0; i < (tui_source_windows ())->count; i++)
+ for (struct tui_win_info *win_info : tui_source_windows ())
{
- win_info = (tui_source_windows ())->list[i];
tui_clear_source_content (win_info, EMPTY_SOURCE_PROMPT);
tui_update_exec_info (win_info);
}
@@ -686,7 +686,7 @@ tui_resize_all (void)
{
case SRC_COMMAND:
case DISASSEM_COMMAND:
- first_win = tui_source_windows ()->list[0];
+ first_win = tui_source_windows ()[0];
first_win->generic.width += width_diff;
locator->width += width_diff;
/* Check for invalid heights. */
@@ -723,7 +723,7 @@ tui_resize_all (void)
{
first_win = TUI_DATA_WIN;
first_win->generic.width += width_diff;
- second_win = tui_source_windows ()->list[0];
+ second_win = tui_source_windows ()[0];
second_win->generic.width += width_diff;
}
/* Change the first window's height/width. */
@@ -1204,7 +1204,7 @@ tui_adjust_win_heights (struct tui_win_info *primary_win_info,
make_invisible_and_set_new_height (primary_win_info, new_height);
if (primary_win_info->generic.type == CMD_WIN)
{
- win_info = (tui_source_windows ())->list[0];
+ win_info = tui_source_windows ()[0];
src_win_info = win_info;
}
else
@@ -1233,7 +1233,7 @@ tui_adjust_win_heights (struct tui_win_info *primary_win_info,
else
{
first_win = TUI_DATA_WIN;
- second_win = (tui_source_windows ())->list[0];
+ second_win = tui_source_windows ()[0];
}
if (primary_win_info == TUI_CMD_WIN)
{ /* Split the change in height accross the 1st & 2nd
@@ -1490,7 +1490,7 @@ new_height_ok (struct tui_win_info *primary_win_info,
struct tui_win_info *win_info;
if (primary_win_info == TUI_CMD_WIN)
- win_info = (tui_source_windows ())->list[0];
+ win_info = tui_source_windows ()[0];
else
win_info = TUI_CMD_WIN;
ok = ((new_height +
@@ -1511,7 +1511,7 @@ new_height_ok (struct tui_win_info *primary_win_info,
else
{
first_win = TUI_DATA_WIN;
- second_win = (tui_source_windows ())->list[0];
+ second_win = tui_source_windows ()[0];
}
/* We could simply add all the heights to obtain the same
result but below is more explicit since we subtract 1 for
@@ -1637,7 +1637,7 @@ parse_scrolling_args (const char *arg,
error (_("Invalid window specified. \n\
The window name specified must be valid and visible.\n"));
else if (*win_to_scroll == TUI_CMD_WIN)
- *win_to_scroll = (tui_source_windows ())->list[0];
+ *win_to_scroll = tui_source_windows ()[0];
}
}
}
@@ -42,9 +42,9 @@
/* Function to display the "main" routine. */
void
-tui_display_main (void)
+tui_display_main ()
{
- if ((tui_source_windows ())->count > 0)
+ if (!tui_source_windows ().empty ())
{
struct gdbarch *gdbarch;
CORE_ADDR addr;
@@ -159,12 +159,8 @@ tui_update_source_windows_with_addr (struct gdbarch *gdbarch, CORE_ADDR addr)
}
else
{
- int i;
-
- for (i = 0; i < (tui_source_windows ())->count; i++)
+ for (struct tui_win_info *win_info : tui_source_windows ())
{
- struct tui_win_info *win_info = (tui_source_windows ())->list[i];
-
tui_clear_source_content (win_info, EMPTY_SOURCE_PROMPT);
tui_clear_exec_info_content (win_info);
}
@@ -406,15 +402,10 @@ tui_set_is_exec_point_at (struct tui_line_or_address l,
This is called whenever a breakpoint is inserted, removed or
has its state changed. */
void
-tui_update_all_breakpoint_info (void)
+tui_update_all_breakpoint_info ()
{
- struct tui_list *list = tui_source_windows ();
- int i;
-
- for (i = 0; i < list->count; i++)
+ for (tui_win_info *win : tui_source_windows ())
{
- struct tui_win_info *win = list->list[i];
-
if (tui_update_breakpoint_info (win, FALSE))
{
tui_update_exec_info (win);