From 61c33f105c71d27386e5b3cc6e1c5f71efe7ed01 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Tue, 12 Nov 2019 17:26:50 -0700 Subject: [PATCH] Change tui_source_window_base::set_contents to return bool This changes tui_source_window_base::set_contents to return bool, rather than tui_status. It also changes one implementation of set_contents to use early returns rather than a variable, which IMO makes it easier to follow. gdb/ChangeLog 2019-12-20 Tom Tromey * tui/tui-winsource.h (struct tui_source_window_base) : Return bool. * tui/tui-winsource.c (tui_source_window_base::update_source_window_as_is): Update. * tui/tui-source.h (struct tui_source_window) : Return bool. * tui/tui-source.c (tui_source_window::set_contents): Return bool. Simplify. * tui/tui-disasm.h (struct tui_disasm_window) : Return bool. * tui/tui-disasm.c (tui_disasm_window::set_contents): Return bool. Change-Id: I8c5212400cd7aadf35760c22d5344cd3b9435674 --- gdb/ChangeLog | 15 +++++ gdb/tui/tui-disasm.c | 6 +- gdb/tui/tui-disasm.h | 7 +- gdb/tui/tui-source.c | 137 +++++++++++++++++++--------------------- gdb/tui/tui-source.h | 7 +- gdb/tui/tui-winsource.c | 5 +- gdb/tui/tui-winsource.h | 7 +- 7 files changed, 95 insertions(+), 89 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 5125089b6f9..2994728395b 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,18 @@ +2019-12-20 Tom Tromey + + * tui/tui-winsource.h (struct tui_source_window_base) + : Return bool. + * tui/tui-winsource.c + (tui_source_window_base::update_source_window_as_is): Update. + * tui/tui-source.h (struct tui_source_window) : + Return bool. + * tui/tui-source.c (tui_source_window::set_contents): Return + bool. Simplify. + * tui/tui-disasm.h (struct tui_disasm_window) : + Return bool. + * tui/tui-disasm.c (tui_disasm_window::set_contents): Return + bool. + 2019-12-20 Tom Tromey * tui/tui-winsource.c (tui_update_source_windows_with_addr) diff --git a/gdb/tui/tui-disasm.c b/gdb/tui/tui-disasm.c index c49369aa925..080253c8279 100644 --- a/gdb/tui/tui-disasm.c +++ b/gdb/tui/tui-disasm.c @@ -198,7 +198,7 @@ tui_find_disassembly_address (struct gdbarch *gdbarch, CORE_ADDR pc, int from) } /* Function to set the disassembly window's content. */ -enum tui_status +bool tui_disasm_window::set_contents (struct gdbarch *arch, struct symtab *s, struct tui_line_or_address line_or_addr) @@ -214,7 +214,7 @@ tui_disasm_window::set_contents (struct gdbarch *arch, gdb_assert (line_or_addr.loa == LOA_ADDRESS); CORE_ADDR pc = line_or_addr.u.addr; if (pc == 0) - return TUI_FAILURE; + return false; gdbarch = arch; start_line_or_addr.loa = LOA_ADDRESS; @@ -251,7 +251,7 @@ tui_disasm_window::set_contents (struct gdbarch *arch, src->line_or_addr.u.addr = asm_lines[i].addr; src->is_exec_point = asm_lines[i].addr == cur_pc; } - return TUI_SUCCESS; + return true; } diff --git a/gdb/tui/tui-disasm.h b/gdb/tui/tui-disasm.h index f5cc3737576..ec8d7f11bf2 100644 --- a/gdb/tui/tui-disasm.h +++ b/gdb/tui/tui-disasm.h @@ -55,10 +55,9 @@ protected: void do_scroll_vertical (int num_to_scroll) override; - enum tui_status set_contents - (struct gdbarch *gdbarch, - struct symtab *s, - struct tui_line_or_address line_or_addr) override; + bool set_contents (struct gdbarch *gdbarch, + struct symtab *s, + struct tui_line_or_address line_or_addr) override; private: /* Answer whether a particular line number or address is displayed diff --git a/gdb/tui/tui-source.c b/gdb/tui/tui-source.c index 062f26f55eb..78afc62ec6e 100644 --- a/gdb/tui/tui-source.c +++ b/gdb/tui/tui-source.c @@ -40,7 +40,7 @@ #include "gdb_curses.h" /* Function to display source in the source window. */ -enum tui_status +bool tui_source_window::set_contents (struct gdbarch *arch, struct symtab *s, struct tui_line_or_address line_or_addr) @@ -48,80 +48,75 @@ tui_source_window::set_contents (struct gdbarch *arch, gdb_assert (line_or_addr.loa == LOA_LINE); int line_no = line_or_addr.u.line_no; - enum tui_status ret = TUI_FAILURE; + if (s == NULL) + return false; - if (s != NULL) - { - int line_width, nlines; + int line_width, nlines; - ret = TUI_SUCCESS; - line_width = width - TUI_EXECINFO_SIZE - 1; - /* Take hilite (window border) into account, when - calculating the number of lines. */ - nlines = (line_no + (height - 2)) - line_no; + line_width = width - TUI_EXECINFO_SIZE - 1; + /* Take hilite (window border) into account, when + calculating the number of lines. */ + nlines = (line_no + (height - 2)) - line_no; - std::string srclines; - const std::vector *offsets; - if (!g_source_cache.get_source_lines (s, line_no, line_no + nlines, - &srclines) - || !g_source_cache.get_line_charpos (s, &offsets)) - ret = TUI_FAILURE; - else - { - int cur_line_no, cur_line; - struct tui_locator_window *locator - = tui_locator_win_info_ptr (); - const char *s_filename = symtab_to_filename_for_display (s); - - title = s_filename; - - m_fullname = make_unique_xstrdup (symtab_to_fullname (s)); - - cur_line = 0; - gdbarch = get_objfile_arch (SYMTAB_OBJFILE (s)); - start_line_or_addr.loa = LOA_LINE; - cur_line_no = start_line_or_addr.u.line_no = line_no; - - int digits = 0; - if (compact_source) - { - /* Solaris 11+gcc 5.5 has ambiguous overloads of log10, so we - cast to double to get the right one. */ - double l = log10 ((double) offsets->size ()); - digits = 1 + (int) l; - } - - const char *iter = srclines.c_str (); - content.resize (nlines); - while (cur_line < nlines) - { - struct tui_source_element *element - = &content[cur_line]; - - std::string text; - if (*iter != '\0') - text = tui_copy_source_line (&iter, cur_line_no, - horizontal_offset, - line_width, digits); - - /* Set whether element is the execution point - and whether there is a break point on it. */ - element->line_or_addr.loa = LOA_LINE; - element->line_or_addr.u.line_no = cur_line_no; - element->is_exec_point - = (filename_cmp (locator->full_name.c_str (), - symtab_to_fullname (s)) == 0 - && cur_line_no == locator->line_no); - - content[cur_line].line = std::move (text); - - cur_line++; - cur_line_no++; - } - ret = TUI_SUCCESS; - } + std::string srclines; + const std::vector *offsets; + if (!g_source_cache.get_source_lines (s, line_no, line_no + nlines, + &srclines) + || !g_source_cache.get_line_charpos (s, &offsets)) + return false; + + int cur_line_no, cur_line; + struct tui_locator_window *locator + = tui_locator_win_info_ptr (); + const char *s_filename = symtab_to_filename_for_display (s); + + title = s_filename; + + m_fullname = make_unique_xstrdup (symtab_to_fullname (s)); + + cur_line = 0; + gdbarch = get_objfile_arch (SYMTAB_OBJFILE (s)); + start_line_or_addr.loa = LOA_LINE; + cur_line_no = start_line_or_addr.u.line_no = line_no; + + int digits = 0; + if (compact_source) + { + /* Solaris 11+gcc 5.5 has ambiguous overloads of log10, so we + cast to double to get the right one. */ + double l = log10 ((double) offsets->size ()); + digits = 1 + (int) l; } - return ret; + + const char *iter = srclines.c_str (); + content.resize (nlines); + while (cur_line < nlines) + { + struct tui_source_element *element + = &content[cur_line]; + + std::string text; + if (*iter != '\0') + text = tui_copy_source_line (&iter, cur_line_no, + horizontal_offset, + line_width, digits); + + /* Set whether element is the execution point + and whether there is a break point on it. */ + element->line_or_addr.loa = LOA_LINE; + element->line_or_addr.u.line_no = cur_line_no; + element->is_exec_point + = (filename_cmp (locator->full_name.c_str (), + symtab_to_fullname (s)) == 0 + && cur_line_no == locator->line_no); + + content[cur_line].line = std::move (text); + + cur_line++; + cur_line_no++; + } + + return true; } diff --git a/gdb/tui/tui-source.h b/gdb/tui/tui-source.h index a573ce47f4f..36515e7115d 100644 --- a/gdb/tui/tui-source.h +++ b/gdb/tui/tui-source.h @@ -60,10 +60,9 @@ protected: void do_scroll_vertical (int num_to_scroll) override; - enum tui_status set_contents - (struct gdbarch *gdbarch, - struct symtab *s, - struct tui_line_or_address line_or_addr) override; + bool set_contents (struct gdbarch *gdbarch, + struct symtab *s, + struct tui_line_or_address line_or_addr) override; private: diff --git a/gdb/tui/tui-winsource.c b/gdb/tui/tui-winsource.c index 9274678aa9f..fad8d7ba11e 100644 --- a/gdb/tui/tui-winsource.c +++ b/gdb/tui/tui-winsource.c @@ -183,10 +183,9 @@ tui_source_window_base::update_source_window_as_is struct symtab *s, struct tui_line_or_address line_or_addr) { - enum tui_status ret - = set_contents (gdbarch, s, line_or_addr); + bool ret = set_contents (gdbarch, s, line_or_addr); - if (ret == TUI_FAILURE) + if (!ret) erase_source_content (); else { diff --git a/gdb/tui/tui-winsource.h b/gdb/tui/tui-winsource.h index 1ba967c5b62..1991d040e38 100644 --- a/gdb/tui/tui-winsource.h +++ b/gdb/tui/tui-winsource.h @@ -87,10 +87,9 @@ protected: void rerender () override; - virtual enum tui_status set_contents - (struct gdbarch *gdbarch, - struct symtab *s, - struct tui_line_or_address line_or_addr) = 0; + virtual bool set_contents (struct gdbarch *gdbarch, + struct symtab *s, + struct tui_line_or_address line_or_addr) = 0; public: -- 2.30.2