diff options
author | Tom Tromey <tom@tromey.com> | 2019-06-20 19:59:06 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2019-06-25 07:48:44 -0600 |
commit | 489e9d8b7bb3337a7f4f902a03c176c22faeabc7 (patch) | |
tree | 0ef7391a8ad8df0e8c463889a64c17164f693fcd /gdb/tui/tui-winsource.c | |
parent | c3fabb7d69b3735bc6042a2992729944c8ced62c (diff) | |
download | gdb-489e9d8b7bb3337a7f4f902a03c176c22faeabc7.zip gdb-489e9d8b7bb3337a7f4f902a03c176c22faeabc7.tar.gz gdb-489e9d8b7bb3337a7f4f902a03c176c22faeabc7.tar.bz2 |
Separate out execution-info window
This pulls the EXEC_INFO_WIN case out into its own subclass of
tui_gen_win_info. This lets us remove an element from
union tui_which_element.
gdb/ChangeLog
2019-06-25 Tom Tromey <tom@tromey.com>
* tui/tui-winsource.c
(tui_exec_info_window::maybe_allocate_content): New method.
(tui_set_exec_info_content, tui_show_exec_info_content): Update.
* tui/tui-layout.c (init_and_make_win): Add EXEC_INFO_WIN case.
(make_source_or_disasm_window): Add cast.
* tui/tui-data.h (union tui_which_element) <simple_string>:
Remove.
(struct tui_source_info): New.
(struct tui_source_window_base) <execution_info>: Change type.
* tui/tui-data.c (init_content_element): Remove EXEC_INFO_WIN
case, and add assert.
(tui_alloc_content): Add assert.
Diffstat (limited to 'gdb/tui/tui-winsource.c')
-rw-r--r-- | gdb/tui/tui-winsource.c | 47 |
1 files changed, 24 insertions, 23 deletions
diff --git a/gdb/tui/tui-winsource.c b/gdb/tui/tui-winsource.c index e56fbcb..204fee1 100644 --- a/gdb/tui/tui-winsource.c +++ b/gdb/tui/tui-winsource.c @@ -470,6 +470,16 @@ tui_update_breakpoint_info (struct tui_win_info *win, return need_refresh; } +/* See tui-data.h. */ + +tui_exec_info_content * +tui_exec_info_window::maybe_allocate_content (int n_elements) +{ + if (m_content == nullptr) + m_content = XNEWVEC (tui_exec_info_content, n_elements); + return m_content; +} + /* Function to initialize the content of the execution info window, based upon the input window which is either the source or @@ -479,45 +489,37 @@ tui_set_exec_info_content (struct tui_source_window_base *win_info) { if (win_info->execution_info != NULL) { - struct tui_gen_win_info *exec_info_ptr = win_info->execution_info; - - if (exec_info_ptr->content == NULL) - exec_info_ptr->content = - tui_alloc_content (win_info->height, exec_info_ptr->type); + tui_exec_info_content *content + = win_info->execution_info->maybe_allocate_content (win_info->height); tui_update_breakpoint_info (win_info, 1); for (int i = 0; i < win_info->content_size; i++) { - struct tui_win_element *element; + tui_exec_info_content &element = content[i]; struct tui_win_element *src_element; int mode; - element = exec_info_ptr->content[i]; src_element = win_info->content[i]; - memset(element->which_element.simple_string, ' ', - sizeof(element->which_element.simple_string)); - element->which_element.simple_string[TUI_EXECINFO_SIZE - 1] = 0; + memset (element, ' ', sizeof (tui_exec_info_content)); + element[TUI_EXECINFO_SIZE - 1] = 0; /* Now update the exec info content based upon the state of each line as indicated by the source content. */ mode = src_element->which_element.source.has_break; if (mode & TUI_BP_HIT) - element->which_element.simple_string[TUI_BP_HIT_POS] = - (mode & TUI_BP_HARDWARE) ? 'H' : 'B'; + element[TUI_BP_HIT_POS] = (mode & TUI_BP_HARDWARE) ? 'H' : 'B'; else if (mode & (TUI_BP_ENABLED | TUI_BP_DISABLED)) - element->which_element.simple_string[TUI_BP_HIT_POS] = - (mode & TUI_BP_HARDWARE) ? 'h' : 'b'; + element[TUI_BP_HIT_POS] = (mode & TUI_BP_HARDWARE) ? 'h' : 'b'; if (mode & TUI_BP_ENABLED) - element->which_element.simple_string[TUI_BP_BREAK_POS] = '+'; + element[TUI_BP_BREAK_POS] = '+'; else if (mode & TUI_BP_DISABLED) - element->which_element.simple_string[TUI_BP_BREAK_POS] = '-'; + element[TUI_BP_BREAK_POS] = '-'; if (src_element->which_element.source.is_exec_point) - element->which_element.simple_string[TUI_EXEC_POS] = '>'; + element[TUI_EXEC_POS] = '>'; } - exec_info_ptr->content_size = win_info->content_size; } } @@ -525,17 +527,16 @@ tui_set_exec_info_content (struct tui_source_window_base *win_info) void tui_show_exec_info_content (struct tui_source_window_base *win_info) { - struct tui_gen_win_info *exec_info = win_info->execution_info; - int cur_line; + struct tui_exec_info_window *exec_info = win_info->execution_info; + const tui_exec_info_content *content = exec_info->get_content (); werase (exec_info->handle); exec_info->refresh_window (); - for (cur_line = 1; (cur_line <= exec_info->content_size); cur_line++) + for (int cur_line = 1; (cur_line <= win_info->content_size); cur_line++) mvwaddstr (exec_info->handle, cur_line, 0, - (char *) exec_info->content[cur_line - 1] - ->which_element.simple_string); + content[cur_line - 1]); exec_info->refresh_window (); exec_info->content_in_use = TRUE; } |