binutils-gdb/gdb/tui/tui-source.h
Tom Tromey 1df2f9ef6c Style disassembly in the TUI
This patch changes the TUI disassembly window to style its contents.
The styling should be identical to what is seen in the CLI.  This
involved a bit of rearrangement, so that the source and disassembly
windows could share both the copy_source_line utility function, and
the ability to react to changes in "set style enabled".

This version introduces a new function to strip the styling from the
address string when computing the length.  As a byproduct, it also
removes the unused "insn_size" computation from
tui_disasm_window::set_contents.

gdb/ChangeLog
2019-11-05  Tom Tromey  <tom@tromey.com>

	* tui/tui-source.h (struct tui_source_window): Inline
	constructor.  Remove destructor.
	<style_changed, m_observable>: Move to superclass.
	* tui/tui-winsource.h (tui_copy_source_line): Declare.
	(struct tui_source_window_base): Move private members to end.
	<style_changed, m_observable>: Move from tui_source_window.
	* tui/tui-winsource.c (tui_copy_source_line): Move from
	tui-source.c.  Rename from copy_source_line.  Add special handling
	for negative line number.
	(tui_source_window_base::style_changed): Move from
	tui_source_window.
	(tui_source_window_base): Register observer.
	(~tui_source_window_base): New.
	* tui/tui-source.c (copy_source_line): Move to tui-winsource.c;
	rename.
	(tui_source_window::set_contents): Use tui_copy_source_line.
	(tui_source_window::tui_source_window): Move to tui-source.h.
	(tui_source_window::~tui_source_window): Remove.
	(tui_source_window::style_changed): Move to superclass.
	* tui/tui-disasm.c (tui_disassemble): Create string file with
	styling, when possible.  Add "addr_size" parameter.
	(tui_disasm_window::set_contents): Use tui_copy_source_line.
	Don't compute maximum size.
	(len_without_escapes): New function

Change-Id: I8722635eeecbbb1633d943a65b856404c2d467b0
2019-11-05 15:23:36 -07:00

84 lines
2.2 KiB
C++

/* TUI display source window.
Copyright (C) 1998-2019 Free Software Foundation, Inc.
Contributed by Hewlett-Packard Company.
This file is part of GDB.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#ifndef TUI_TUI_SOURCE_H
#define TUI_TUI_SOURCE_H
#include "tui/tui-data.h"
#include "tui-winsource.h"
struct symtab;
/* A TUI source window. */
struct tui_source_window : public tui_source_window_base
{
tui_source_window ()
: tui_source_window_base (SRC_WIN)
{
}
DISABLE_COPY_AND_ASSIGN (tui_source_window);
const char *name () const override
{
return SRC_NAME;
}
/* Return true if the location LOC corresponds to the line number
LINE_NO in this source window; false otherwise. */
bool location_matches_p (struct bp_location *loc, int line_no) override;
bool showing_source_p (const char *filename) const;
void maybe_update (struct frame_info *fi, symtab_and_line sal,
int line_no, CORE_ADDR addr)
override;
void erase_source_content () override
{
do_erase_source_content (_("[ No Source Available ]"));
}
void show_symtab_source (struct gdbarch *, struct symtab *,
struct tui_line_or_address);
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;
private:
/* Answer whether a particular line number or address is displayed
in the current source window. */
bool line_is_displayed (int line) const;
/* It is the resolved form as returned by symtab_to_fullname. */
gdb::unique_xmalloc_ptr<char> m_fullname;
};
#endif /* TUI_TUI_SOURCE_H */