summaryrefslogtreecommitdiffstats
path: root/lldb/source/Target/Target.cpp
diff options
context:
space:
mode:
authorAlex Langford <apl@fb.com>2019-07-31 20:47:38 +0000
committerAlex Langford <apl@fb.com>2019-07-31 20:47:38 +0000
commit70402bfc46e032ef4f826bf1cc984cf18bd8f63d (patch)
tree127109d3b49ef8beba1e6b05cd806d6286417254 /lldb/source/Target/Target.cpp
parent33703fb9f908113f93bd9af83a79eb56f5131735 (diff)
downloadbcm5719-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.cpp28
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);
OpenPOWER on IntegriCloud