From: Tom Tromey Date: Sun, 16 Jun 2019 20:43:56 +0000 (-0600) Subject: Introduce two TUI source window methods X-Git-Tag: binutils-2_33~779 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ad54d15bdb71b05010ece1ef32ab22ab46794166;p=external%2Fbinutils.git 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. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 1fea395..1a60375 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,29 @@ 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) (tui_source_window_base::refresh): New methods. (tui_refresh_all): Call the refresh method. diff --git a/gdb/tui/tui-data.c b/gdb/tui/tui-data.c index 6df7ce2..3298eb8 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 e4a9b04..183efb1 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 4a1d79e..7e94a13 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 de78c6c..9b2bd0b 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 d09acd2..125a5b7 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 fa9e544..5946db7 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 98ce75f..ada3964 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 *,