summaryrefslogtreecommitdiffstats
path: root/lldb/source/Target
diff options
context:
space:
mode:
authorRaphael Isemann <teemperor@gmail.com>2018-08-02 00:30:15 +0000
committerRaphael Isemann <teemperor@gmail.com>2018-08-02 00:30:15 +0000
commit566afa0ab2ce3fc753ce7490f7c1394c3f4699c0 (patch)
tree4295653b2b9482af2a8f0cbcd7cc90ad7fd54147 /lldb/source/Target
parentcedebd594083a54cfb0a0b766fd000b6f11216fa (diff)
downloadbcm5719-llvm-566afa0ab2ce3fc753ce7490f7c1394c3f4699c0.tar.gz
bcm5719-llvm-566afa0ab2ce3fc753ce7490f7c1394c3f4699c0.zip
[LLDB] Added syntax highlighting support
Summary: This patch adds syntax highlighting support to LLDB. When enabled (and lldb is allowed to use colors), printed source code is annotated with the ANSI color escape sequences. So far we have only one highlighter which is based on Clang and is responsible for all languages that are supported by Clang. It essentially just runs the raw lexer over the input and then surrounds the specific tokens with the configured escape sequences. Reviewers: zturner, davide Reviewed By: davide Subscribers: labath, teemperor, llvm-commits, mgorny, lldb-commits Tags: #lldb Differential Revision: https://reviews.llvm.org/D49334 llvm-svn: 338662
Diffstat (limited to 'lldb/source/Target')
-rw-r--r--lldb/source/Target/Language.cpp32
1 files changed, 32 insertions, 0 deletions
diff --git a/lldb/source/Target/Language.cpp b/lldb/source/Target/Language.cpp
index cde6f8654ae..599b4422274 100644
--- a/lldb/source/Target/Language.cpp
+++ b/lldb/source/Target/Language.cpp
@@ -77,7 +77,39 @@ Language *Language::FindPlugin(lldb::LanguageType language) {
return nullptr;
}
+Language *Language::FindPlugin(llvm::StringRef file_path) {
+ Language *result = nullptr;
+ ForEach([&result, file_path](Language *language) {
+ if (language->IsSourceFile(file_path)) {
+ result = language;
+ return false;
+ }
+ return true;
+ });
+ return result;
+}
+
+Language *Language::FindPlugin(LanguageType language,
+ llvm::StringRef file_path) {
+ Language *result = FindPlugin(language);
+ // Finding a language by file path is slower, we so we use this as the
+ // fallback.
+ if (!result)
+ result = FindPlugin(file_path);
+ return result;
+}
+
void Language::ForEach(std::function<bool(Language *)> callback) {
+ // If we want to iterate over all languages, we first have to complete the
+ // LanguagesMap.
+ static llvm::once_flag g_initialize;
+ llvm::call_once(g_initialize, [] {
+ for (unsigned lang = eLanguageTypeUnknown; lang < eNumLanguageTypes;
+ ++lang) {
+ FindPlugin(static_cast<lldb::LanguageType>(lang));
+ }
+ });
+
std::lock_guard<std::mutex> guard(GetLanguagesMutex());
LanguagesMap &map(GetLanguagesMap());
for (const auto &entry : map) {
OpenPOWER on IntegriCloud