From ad54d15bdb71b05010ece1ef32ab22ab46794166 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Sun, 16 Jun 2019 14:43:56 -0600 Subject: [PATCH] Introduce two TUI source window methods This adds two methods to the TUI source window. These are just renamings of existing functions. It also changes the source window list to have a more precise type, letting the code be more type-safe. This will be useful again later. gdb/ChangeLog 2019-06-25 Tom Tromey * tui/tui-winsource.h (tui_refill_source_window) (tui_set_is_exec_point_at): Don't declare. * tui/tui-winsource.c (tui_update_source_windows_with_addr) (tui_source_window_base::refill): Rename from tui_refill_source_window. (tui_source_window_base::do_scroll_horizontal): Update. (tui_source_window_base::set_is_exec_point_at): Rename from tui_set_is_exec_point_at. (tui_update_all_breakpoint_info): Update. * tui/tui-stack.c (tui_show_frame_info): Update. * tui/tui-layout.c (show_data): Add cast. * tui/tui-hooks.c (tui_redisplay_source): Call refill method. * tui/tui-data.h (struct tui_source_window_base) : New methods. (tui_source_windows, tui_add_to_source_windows): Update types. (tui_add_to_source_windows): Remove redundant declaration. * tui/tui-data.c (source_windows): Store tui_source_window_base. (tui_source_windows): Change return type. (tui_clear_source_windows_detail): Update. (tui_add_to_source_windows): Change type of parameter. (tui_free_all_source_wins_content): Update. --- gdb/ChangeLog | 24 ++++++++++++++++++++++++ gdb/tui/tui-data.c | 13 ++++++------- gdb/tui/tui-data.h | 13 +++++++++---- gdb/tui/tui-hooks.c | 2 +- gdb/tui/tui-layout.c | 3 ++- gdb/tui/tui-stack.c | 8 ++++---- gdb/tui/tui-winsource.c | 31 +++++++++++++------------------ gdb/tui/tui-winsource.h | 3 --- 8 files changed, 59 insertions(+), 38 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 1fea395ff8a..1a60375fa8b 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,27 @@ +2019-06-25 Tom Tromey + + * tui/tui-winsource.h (tui_refill_source_window) + (tui_set_is_exec_point_at): Don't declare. + * tui/tui-winsource.c (tui_update_source_windows_with_addr) + (tui_source_window_base::refill): Rename from + tui_refill_source_window. + (tui_source_window_base::do_scroll_horizontal): Update. + (tui_source_window_base::set_is_exec_point_at): Rename from + tui_set_is_exec_point_at. + (tui_update_all_breakpoint_info): Update. + * tui/tui-stack.c (tui_show_frame_info): Update. + * tui/tui-layout.c (show_data): Add cast. + * tui/tui-hooks.c (tui_redisplay_source): Call refill method. + * tui/tui-data.h (struct tui_source_window_base) : New methods. + (tui_source_windows, tui_add_to_source_windows): Update types. + (tui_add_to_source_windows): Remove redundant declaration. + * tui/tui-data.c (source_windows): Store tui_source_window_base. + (tui_source_windows): Change return type. + (tui_clear_source_windows_detail): Update. + (tui_add_to_source_windows): Change type of parameter. + (tui_free_all_source_wins_content): Update. + 2019-06-25 Tom Tromey * tui/tui-wingeneral.c (tui_win_info::refresh) diff --git a/gdb/tui/tui-data.c b/gdb/tui/tui-data.c index 6df7ce2661d..3298eb8248c 100644 --- a/gdb/tui/tui-data.c +++ b/gdb/tui/tui-data.c @@ -38,7 +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 std::vector source_windows; +static std::vector source_windows; static struct tui_win_info *win_with_focus = NULL; static struct tui_layout_def layout_def = { SRC_WIN, /* DISPLAY_MODE */ @@ -124,7 +124,7 @@ 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. */ -std::vector & +std::vector & tui_source_windows () { return source_windows; @@ -145,7 +145,7 @@ tui_clear_source_windows () void tui_clear_source_windows_detail () { - for (tui_win_info *win : tui_source_windows ()) + for (tui_source_window_base *win : tui_source_windows ()) win->clear_detail (); } @@ -154,7 +154,7 @@ tui_clear_source_windows_detail () one source window (either source or disassembly), but both can be displayed at the same time. */ void -tui_add_to_source_windows (struct tui_win_info *win_info) +tui_add_to_source_windows (struct tui_source_window_base *win_info) { if (source_windows.size () < 2) source_windows.push_back (win_info); @@ -620,11 +620,10 @@ tui_win_info::~tui_win_info () void tui_free_all_source_wins_content () { - for (tui_win_info *win_info : tui_source_windows ()) + for (tui_source_window_base *win_info : tui_source_windows ()) { tui_free_win_content (&(win_info->generic)); - tui_source_window_base *base = (tui_source_window_base *) win_info; - tui_free_win_content (base->execution_info); + tui_free_win_content (win_info->execution_info); } } diff --git a/gdb/tui/tui-data.h b/gdb/tui/tui-data.h index e4a9b04f77b..183efb12a87 100644 --- a/gdb/tui/tui-data.h +++ b/gdb/tui/tui-data.h @@ -304,6 +304,13 @@ public: void make_visible (bool visible) override; void refresh () override; + /* Refill the source window's source cache and update it. If this + is a disassembly window, then just update it. */ + void refill (); + + /* Set the location of the execution point. */ + void set_is_exec_point_at (struct tui_line_or_address l); + /* Does the locator belong to this window? */ bool m_has_locator = false; /* Execution information window. */ @@ -451,10 +458,10 @@ 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 std::vector &tui_source_windows (); +extern std::vector &tui_source_windows (); extern void tui_clear_source_windows (void); extern void tui_clear_source_windows_detail (void); -extern void tui_add_to_source_windows (struct tui_win_info *); +extern void tui_add_to_source_windows (struct tui_source_window_base *); extern struct tui_win_info *tui_win_with_focus (void); extern void tui_set_win_with_focus (struct tui_win_info *); extern struct tui_layout_def *tui_layout_def (void); @@ -464,8 +471,6 @@ extern void tui_set_win_resized_to (int); extern struct tui_win_info *tui_next_win (struct tui_win_info *); extern struct tui_win_info *tui_prev_win (struct tui_win_info *); -extern void tui_add_to_source_windows (struct tui_win_info *); - extern unsigned int tui_tab_width; #endif /* TUI_TUI_DATA_H */ diff --git a/gdb/tui/tui-hooks.c b/gdb/tui/tui-hooks.c index 4a1d79e0ad0..7e94a13e901 100644 --- a/gdb/tui/tui-hooks.c +++ b/gdb/tui/tui-hooks.c @@ -212,7 +212,7 @@ tui_redisplay_source () if (tui_is_window_visible (SRC_WIN)) { /* Force redisplay. */ - tui_refill_source_window (tui_win_list[SRC_WIN]); + TUI_SRC_WIN->refill (); } } diff --git a/gdb/tui/tui-layout.c b/gdb/tui/tui-layout.c index de78c6c0ac8..9b2bd0b7b57 100644 --- a/gdb/tui/tui-layout.c +++ b/gdb/tui/tui-layout.c @@ -776,7 +776,8 @@ show_data (enum tui_layout_type new_layout) base->m_has_locator = true; tui_make_visible (locator); tui_show_locator_content (); - tui_add_to_source_windows (tui_win_list[win_type]); + tui_add_to_source_windows + ((tui_source_window_base *) tui_win_list[win_type]); tui_set_current_layout_to (new_layout); } diff --git a/gdb/tui/tui-stack.c b/gdb/tui/tui-stack.c index d09acd28585..125a5b7a8e3 100644 --- a/gdb/tui/tui-stack.c +++ b/gdb/tui/tui-stack.c @@ -396,7 +396,7 @@ tui_show_frame_info (struct frame_info *fi) tui_show_locator_content (); start_line = 0; - for (struct tui_win_info *win_info : tui_source_windows ()) + for (struct tui_source_window_base *win_info : tui_source_windows ()) { union tui_which_element *item; @@ -436,7 +436,7 @@ tui_show_frame_info (struct frame_info *fi) else { l.u.line_no = item->locator.line_no; - tui_set_is_exec_point_at (l, win_info); + win_info->set_is_exec_point_at (l); } } else @@ -454,7 +454,7 @@ tui_show_frame_info (struct frame_info *fi) else { a.u.addr = item->locator.addr; - tui_set_is_exec_point_at (a, win_info); + win_info->set_is_exec_point_at (a); } } } @@ -472,7 +472,7 @@ tui_show_frame_info (struct frame_info *fi) return 0; tui_show_locator_content (); - for (struct tui_win_info *win_info : tui_source_windows ()) + for (struct tui_source_window_base *win_info : tui_source_windows ()) { tui_clear_source_content (win_info, EMPTY_SOURCE_PROMPT); tui_update_exec_info (win_info); diff --git a/gdb/tui/tui-winsource.c b/gdb/tui/tui-winsource.c index fa9e544f206..5946db75aaf 100644 --- a/gdb/tui/tui-winsource.c +++ b/gdb/tui/tui-winsource.c @@ -160,7 +160,7 @@ tui_update_source_windows_with_addr (struct gdbarch *gdbarch, CORE_ADDR addr) } else { - for (struct tui_win_info *win_info : tui_source_windows ()) + for (struct tui_source_window_base *win_info : tui_source_windows ()) { tui_clear_source_content (win_info, EMPTY_SOURCE_PROMPT); tui_clear_exec_info_content (win_info); @@ -309,15 +309,14 @@ tui_show_source_content (struct tui_win_info *win_info) win_info->generic.content_in_use = TRUE; } -/* Refill the source window's source cache and update it. If WIN_INFO - is a disassembly window, then just update it. */ +/* See tui-data.h. */ void -tui_refill_source_window (struct tui_win_info *win_info) +tui_source_window_base::refill () { symtab *s = nullptr; - if (win_info->generic.type == SRC_WIN) + if (generic.type == SRC_WIN) { symtab_and_line cursal = get_current_source_symtab_and_line (); s = (cursal.symtab == NULL @@ -325,11 +324,8 @@ tui_refill_source_window (struct tui_win_info *win_info) : cursal.symtab); } - tui_source_window_base *base = (tui_source_window_base *) win_info; - tui_update_source_window_as_is (win_info, - base->gdbarch, - s, - win_info->generic.content[0] + tui_update_source_window_as_is (this, gdbarch, s, + generic.content[0] ->which_element.source.line_or_addr, FALSE); } @@ -353,7 +349,7 @@ tui_source_window_base::do_scroll_horizontal offset = 0; } horizontal_offset = offset; - tui_refill_source_window (this); + refill (); } } @@ -362,15 +358,14 @@ tui_source_window_base::do_scroll_horizontal line_no. */ void -tui_set_is_exec_point_at (struct tui_line_or_address l, - struct tui_win_info *win_info) +tui_source_window_base::set_is_exec_point_at (struct tui_line_or_address l) { int changed = 0; int i; - tui_win_content content = win_info->generic.content; + tui_win_content content = generic.content; i = 0; - while (i < win_info->generic.content_size) + while (i < generic.content_size) { int new_state; struct tui_line_or_address content_loa = @@ -389,12 +384,12 @@ tui_set_is_exec_point_at (struct tui_line_or_address l, { changed++; content[i]->which_element.source.is_exec_point = new_state; - tui_show_source_line (win_info, i + 1); + tui_show_source_line (this, i + 1); } i++; } if (changed) - tui_refill_source_window (win_info); + refill (); } /* Update the execution windows to show the active breakpoints. @@ -403,7 +398,7 @@ tui_set_is_exec_point_at (struct tui_line_or_address l, void tui_update_all_breakpoint_info () { - for (tui_win_info *win : tui_source_windows ()) + for (tui_source_window_base *win : tui_source_windows ()) { if (tui_update_breakpoint_info (win, FALSE)) { diff --git a/gdb/tui/tui-winsource.h b/gdb/tui/tui-winsource.h index 98ce75fb620..ada3964ad1a 100644 --- a/gdb/tui/tui-winsource.h +++ b/gdb/tui/tui-winsource.h @@ -53,15 +53,12 @@ extern void tui_update_source_windows_with_line (struct symtab *, extern void tui_clear_source_content (struct tui_win_info *, int); extern void tui_erase_source_content (struct tui_win_info *, int); extern void tui_show_source_content (struct tui_win_info *); -extern void tui_refill_source_window (struct tui_win_info *); extern enum tui_status tui_set_exec_info_content (struct tui_win_info *); extern void tui_show_exec_info_content (struct tui_win_info *); extern void tui_erase_exec_info_content (struct tui_win_info *); extern void tui_clear_exec_info_content (struct tui_win_info *); extern void tui_update_exec_info (struct tui_win_info *); -extern void tui_set_is_exec_point_at (struct tui_line_or_address, - struct tui_win_info *); extern enum tui_status tui_alloc_source_buffer (struct tui_win_info *); extern int tui_line_is_displayed (int, struct tui_win_info *, -- 2.30.2