diff options
author | Tom Tromey <tom@tromey.com> | 2019-06-24 16:02:47 -0600 |
---|---|---|
committer | Tom Tromey <tromey@adacore.com> | 2019-08-19 10:17:27 -0600 |
commit | d806ea2d0ef362fcddd2c1659f537b68aa114203 (patch) | |
tree | 98a15b8aa7aa4a70d552bb115a60a465478f8ec7 /gdb/source-cache.c | |
parent | c1a5d03a89a455d79f025c66dce83342de4d26ce (diff) | |
download | gdb-d806ea2d0ef362fcddd2c1659f537b68aa114203.zip gdb-d806ea2d0ef362fcddd2c1659f537b68aa114203.tar.gz gdb-d806ea2d0ef362fcddd2c1659f537b68aa114203.tar.bz2 |
Add Rust support to source highlighting
Currently, no release of GNU Source Highlight supports Rust. However,
I've checked in a patch to do so there, and I plan to make a new
release sometime this summer.
This patch prepares gdb for that by adding support for Rust to the
source highlighting code.
Because Source Highlight will throw an exception if the language is
unrecognized, this also changes gdb to ignore exceptions here. This
will cause gdb to fall back to un-highlighted source text.
This updates gdb's configure script to reject the combination of
Source Highlight and -static-libstdc++. This is done because it's not
possible to use -static-libstdc++ and then catch exceptions from a
shared library.
Tested with the current and development versions of Source Highlight.
gdb/ChangeLog
2019-08-19 Tom Tromey <tom@tromey.com>
* configure: Rebuild.
* configure.ac: Disallow the combination of -static-libstdc++ and
source highlight.
* source-cache.c (get_language_name): Handle rust.
(source_cache::get_source_lines): Ignore highlighting exceptions.
Diffstat (limited to 'gdb/source-cache.c')
-rw-r--r-- | gdb/source-cache.c | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/gdb/source-cache.c b/gdb/source-cache.c index 9039f8f..18e2be9 100644 --- a/gdb/source-cache.c +++ b/gdb/source-cache.c @@ -135,8 +135,7 @@ get_language_name (enum language lang) break; case language_rust: - /* Not handled by Source Highlight. */ - break; + return "rust.lang"; case language_ada: return "ada.lang"; @@ -197,11 +196,22 @@ source_cache::ensure (struct symtab *s) highlighter->setStyleFile ("esc.style"); } - std::istringstream input (contents); - std::ostringstream output; - highlighter->highlight (input, output, lang_name, fullname); - - contents = output.str (); + try + { + std::istringstream input (contents); + std::ostringstream output; + highlighter->highlight (input, output, lang_name, fullname); + contents = output.str (); + } + catch (...) + { + /* Source Highlight will throw an exception if + highlighting fails. One possible reason it can fail + is if the language is unknown -- which matters to gdb + because Rust support wasn't added until after 3.1.8. + Ignore exceptions here and fall back to + un-highlighted text. */ + } } } #endif /* HAVE_SOURCE_HIGHLIGHT */ |