diff options
| author | Adrian Prantl <aprantl@apple.com> | 2019-08-22 20:41:16 +0000 |
|---|---|---|
| committer | Adrian Prantl <aprantl@apple.com> | 2019-08-22 20:41:16 +0000 |
| commit | b041602e3fe330368200a925c18af4d5e0df155c (patch) | |
| tree | 55290996dd526619f05d96484bf657230b8eac07 /lldb/source/Target | |
| parent | dddc0fd9cbba726a82a1f6b88015fa73dd2643c6 (diff) | |
| download | bcm5719-llvm-b041602e3fe330368200a925c18af4d5e0df155c.tar.gz bcm5719-llvm-b041602e3fe330368200a925c18af4d5e0df155c.zip | |
Revert Extend FindTypes with CompilerContext to allow filtering by language.
This reverts r369690 (git commit aa3a564efa6b5fff2129f81a4041069a0233168f)
llvm-svn: 369702
Diffstat (limited to 'lldb/source/Target')
| -rw-r--r-- | lldb/source/Target/Language.cpp | 24 | ||||
| -rw-r--r-- | lldb/source/Target/Target.cpp | 39 |
2 files changed, 41 insertions, 22 deletions
diff --git a/lldb/source/Target/Language.cpp b/lldb/source/Target/Language.cpp index 43d0be0f737..3c3ef2841d4 100644 --- a/lldb/source/Target/Language.cpp +++ b/lldb/source/Target/Language.cpp @@ -357,16 +357,26 @@ std::set<lldb::LanguageType> Language::GetSupportedLanguages() { return supported_languages; } -LanguageSet Language::GetLanguagesSupportingTypeSystems() { - return PluginManager::GetAllTypeSystemSupportedLanguagesForTypes(); +void Language::GetLanguagesSupportingTypeSystems( + std::set<lldb::LanguageType> &languages, + std::set<lldb::LanguageType> &languages_for_expressions) { + uint32_t idx = 0; + + while (TypeSystemEnumerateSupportedLanguages enumerate = PluginManager:: + GetTypeSystemEnumerateSupportedLanguagesCallbackAtIndex(idx++)) { + (*enumerate)(languages, languages_for_expressions); + } } -LanguageSet Language::GetLanguagesSupportingTypeSystemsForExpressions() { - return PluginManager::GetAllTypeSystemSupportedLanguagesForExpressions(); -} +void Language::GetLanguagesSupportingREPLs( + std::set<lldb::LanguageType> &languages) { + uint32_t idx = 0; -LanguageSet Language::GetLanguagesSupportingREPLs() { - return PluginManager::GetREPLAllTypeSystemSupportedLanguages(); + while (REPLEnumerateSupportedLanguages enumerate = + PluginManager::GetREPLEnumerateSupportedLanguagesCallbackAtIndex( + idx++)) { + (*enumerate)(languages); + } } std::unique_ptr<Language::TypeScavenger> Language::GetTypeScavenger() { diff --git a/lldb/source/Target/Target.cpp b/lldb/source/Target/Target.cpp index 957b97e429d..2368fa18ce7 100644 --- a/lldb/source/Target/Target.cpp +++ b/lldb/source/Target/Target.cpp @@ -206,11 +206,13 @@ const lldb::ProcessSP &Target::GetProcessSP() const { return m_process_sp; } lldb::REPLSP Target::GetREPL(Status &err, lldb::LanguageType language, const char *repl_options, bool can_create) { if (language == eLanguageTypeUnknown) { - LanguageSet repl_languages = Language::GetLanguagesSupportingREPLs(); + std::set<LanguageType> repl_languages; - if (auto single_lang = repl_languages.GetSingularLanguage()) { - language = *single_lang; - } else if (repl_languages.Empty()) { + Language::GetLanguagesSupportingREPLs(repl_languages); + + if (repl_languages.size() == 1) { + language = *repl_languages.begin(); + } else if (repl_languages.size() == 0) { err.SetErrorStringWithFormat( "LLDB isn't configured with REPL support for any languages."); return REPLSP(); @@ -2127,18 +2129,23 @@ Target::GetScratchTypeSystemForLanguage(lldb::LanguageType language, if (language == eLanguageTypeMipsAssembler // GNU AS and LLVM use it for all // assembly code || language == eLanguageTypeUnknown) { - LanguageSet languages_for_expressions = - Language::GetLanguagesSupportingTypeSystemsForExpressions(); + std::set<lldb::LanguageType> languages_for_types; + std::set<lldb::LanguageType> languages_for_expressions; + + Language::GetLanguagesSupportingTypeSystems(languages_for_types, + languages_for_expressions); - if (languages_for_expressions[eLanguageTypeC]) { + if (languages_for_expressions.count(eLanguageTypeC)) { language = eLanguageTypeC; // LLDB's default. Override by setting the // target language. } else { - if (languages_for_expressions.Empty()) + if (languages_for_expressions.empty()) { return llvm::make_error<llvm::StringError>( "No expression support for any languages", llvm::inconvertibleErrorCode()); - language = (LanguageType)languages_for_expressions.bitvector.find_first(); + } else { + language = *languages_for_expressions.begin(); + } } } @@ -2152,19 +2159,21 @@ std::vector<TypeSystem *> Target::GetScratchTypeSystems(bool create_on_demand) { std::vector<TypeSystem *> scratch_type_systems; - LanguageSet languages_for_expressions = - Language::GetLanguagesSupportingTypeSystemsForExpressions(); + std::set<lldb::LanguageType> languages_for_types; + std::set<lldb::LanguageType> languages_for_expressions; + + Language::GetLanguagesSupportingTypeSystems(languages_for_types, + languages_for_expressions); - for (auto bit : languages_for_expressions.bitvector.set_bits()) { - auto language = (LanguageType)bit; + for (auto lang : languages_for_expressions) { auto type_system_or_err = - GetScratchTypeSystemForLanguage(language, create_on_demand); + GetScratchTypeSystemForLanguage(lang, create_on_demand); if (!type_system_or_err) LLDB_LOG_ERROR(lldb_private::GetLogIfAnyCategoriesSet(LIBLLDB_LOG_TARGET), type_system_or_err.takeError(), "Language '{}' has expression support but no scratch type " "system available", - Language::GetNameForLanguageType(language)); + Language::GetNameForLanguageType(lang)); else scratch_type_systems.emplace_back(&type_system_or_err.get()); } |

