Instantiate a single source highlighter
It occurred to me that there's no reason to make a new source highlighter each time gdb needs to highlight some source code. Instead, a single one can be created and then simply reused each time. This patch implements this idea. Tested on x86-64 Fedora 29. gdb/ChangeLog 2019-06-19 Tom Tromey <tromey@adacore.com> * source-cache.c (highlighter): New global. (source_cache::get_source_lines): Create a highlighter on demand.
This commit is contained in:
parent
6f5601c4d0
commit
dcf3792354
2 changed files with 19 additions and 3 deletions
|
@ -1,3 +1,8 @@
|
|||
2019-06-19 Tom Tromey <tromey@adacore.com>
|
||||
|
||||
* source-cache.c (highlighter): New global.
|
||||
(source_cache::get_source_lines): Create a highlighter on demand.
|
||||
|
||||
2019-06-18 Andrew Burgess <andrew.burgess@embecosm.com>
|
||||
|
||||
* defs.h (deprecated_interactive_hook): Delete declaration.
|
||||
|
|
|
@ -197,6 +197,13 @@ source_cache::get_source_lines (struct symtab *s, int first_line,
|
|||
std::ifstream input (fullname);
|
||||
if (input.is_open ())
|
||||
{
|
||||
/* The global source highlight object, or null if one
|
||||
was never constructed. This is stored here rather
|
||||
than in the class so that we don't need to include
|
||||
anything or do conditional compilation in
|
||||
source-cache.h. */
|
||||
static srchilite::SourceHighlight *highlighter;
|
||||
|
||||
if (s->line_charpos == 0)
|
||||
{
|
||||
scoped_fd desc (open_source_file_with_line_charpos (s));
|
||||
|
@ -209,11 +216,15 @@ source_cache::get_source_lines (struct symtab *s, int first_line,
|
|||
use-after-free. */
|
||||
fullname = symtab_to_fullname (s);
|
||||
}
|
||||
srchilite::SourceHighlight highlighter ("esc.outlang");
|
||||
highlighter.setStyleFile("esc.style");
|
||||
|
||||
if (highlighter == nullptr)
|
||||
{
|
||||
highlighter = new srchilite::SourceHighlight ("esc.outlang");
|
||||
highlighter->setStyleFile ("esc.style");
|
||||
}
|
||||
|
||||
std::ostringstream output;
|
||||
highlighter.highlight (input, output, lang_name, fullname);
|
||||
highlighter->highlight (input, output, lang_name, fullname);
|
||||
|
||||
source_text result = { fullname, output.str () };
|
||||
m_source_map.push_back (std::move (result));
|
||||
|
|
Loading…
Add table
Reference in a new issue