diff options
author | Alex Langford <apl@fb.com> | 2019-07-31 20:47:38 +0000 |
---|---|---|
committer | Alex Langford <apl@fb.com> | 2019-07-31 20:47:38 +0000 |
commit | 70402bfc46e032ef4f826bf1cc984cf18bd8f63d (patch) | |
tree | 127109d3b49ef8beba1e6b05cd806d6286417254 /lldb/source/Target/Target.cpp | |
parent | 33703fb9f908113f93bd9af83a79eb56f5131735 (diff) | |
download | bcm5719-llvm-70402bfc46e032ef4f826bf1cc984cf18bd8f63d.tar.gz bcm5719-llvm-70402bfc46e032ef4f826bf1cc984cf18bd8f63d.zip |
[API] Remove use of ClangASTContext from SBTarget
Summary:
The methods to find types in a Target aren't clang specific and are
pretty generalizable to type systems. Additionally, to support some of
the use cases in SBTarget, I've added a "GetScratchTypeSystems" method
to Target to support getting all type systems for a target we are
debugging.
Differential Revision: https://reviews.llvm.org/D64964
llvm-svn: 367480
Diffstat (limited to 'lldb/source/Target/Target.cpp')
-rw-r--r-- | lldb/source/Target/Target.cpp | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/lldb/source/Target/Target.cpp b/lldb/source/Target/Target.cpp index 568eec3892c..0c98882b80a 100644 --- a/lldb/source/Target/Target.cpp +++ b/lldb/source/Target/Target.cpp @@ -2153,6 +2153,34 @@ Target::GetScratchTypeSystemForLanguage(lldb::LanguageType language, create_on_demand); } +std::vector<TypeSystem *> Target::GetScratchTypeSystems(bool create_on_demand) { + if (!m_valid) + return {}; + + std::vector<TypeSystem *> scratch_type_systems; + + std::set<lldb::LanguageType> languages_for_types; + std::set<lldb::LanguageType> languages_for_expressions; + + Language::GetLanguagesSupportingTypeSystems(languages_for_types, + languages_for_expressions); + + for (auto lang : languages_for_expressions) { + auto type_system_or_err = + 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(lang)); + else + scratch_type_systems.emplace_back(&type_system_or_err.get()); + } + + return scratch_type_systems; +} + PersistentExpressionState * Target::GetPersistentExpressionStateForLanguage(lldb::LanguageType language) { auto type_system_or_err = GetScratchTypeSystemForLanguage(language, true); |