summaryrefslogtreecommitdiffstats
path: root/lldb/source/Interpreter
diff options
context:
space:
mode:
authorAdrian Prantl <aprantl@apple.com>2019-08-22 19:24:55 +0000
committerAdrian Prantl <aprantl@apple.com>2019-08-22 19:24:55 +0000
commitaa3a564efa6b5fff2129f81a4041069a0233168f (patch)
tree230811320c2fff1889c8fcfa2d561dac57e6afc9 /lldb/source/Interpreter
parent6c6dd6acf9e4a9d0599c99abbcbb696ed6b5ab19 (diff)
downloadbcm5719-llvm-aa3a564efa6b5fff2129f81a4041069a0233168f.tar.gz
bcm5719-llvm-aa3a564efa6b5fff2129f81a4041069a0233168f.zip
Extend FindTypes with CompilerContext to allow filtering by language.
This patch is also motivated by the Swift branch and is effectively NFC for the single-TypeSystem llvm.org branch. In multi-language projects it is extremely common to have, e.g., a Clang type and a similarly-named rendition of that same type in another language. When searching for a type It is much cheaper to pass a set of supported languages to the SymbolFile than having it materialize every result and then rejecting the materialized types that have the wrong language. Differential Revision: https://reviews.llvm.org/D66546 <rdar://problem/54471165> llvm-svn: 369690
Diffstat (limited to 'lldb/source/Interpreter')
-rw-r--r--lldb/source/Interpreter/OptionValueLanguage.cpp16
1 files changed, 7 insertions, 9 deletions
diff --git a/lldb/source/Interpreter/OptionValueLanguage.cpp b/lldb/source/Interpreter/OptionValueLanguage.cpp
index d935d5e2349..1d7e18868b6 100644
--- a/lldb/source/Interpreter/OptionValueLanguage.cpp
+++ b/lldb/source/Interpreter/OptionValueLanguage.cpp
@@ -10,6 +10,7 @@
#include "lldb/DataFormatters/FormatManager.h"
#include "lldb/Target/Language.h"
+#include "lldb/Symbol/TypeSystem.h"
#include "lldb/Utility/Args.h"
#include "lldb/Utility/Stream.h"
@@ -39,23 +40,20 @@ Status OptionValueLanguage::SetValueFromString(llvm::StringRef value,
case eVarSetOperationReplace:
case eVarSetOperationAssign: {
ConstString lang_name(value.trim());
- std::set<lldb::LanguageType> languages_for_types;
- std::set<lldb::LanguageType> languages_for_expressions;
- Language::GetLanguagesSupportingTypeSystems(languages_for_types,
- languages_for_expressions);
-
+ LanguageSet languages_for_types = Language::GetLanguagesSupportingTypeSystems();
LanguageType new_type =
Language::GetLanguageTypeFromString(lang_name.GetStringRef());
- if (new_type && languages_for_types.count(new_type)) {
+ if (new_type && languages_for_types[new_type]) {
m_value_was_set = true;
m_current_value = new_type;
} else {
StreamString error_strm;
error_strm.Printf("invalid language type '%s', ", value.str().c_str());
error_strm.Printf("valid values are:\n");
- for (lldb::LanguageType language : languages_for_types) {
- error_strm.Printf("%s%s%s", " ",
- Language::GetNameForLanguageType(language), "\n");
+ for (int bit : languages_for_types.bitvector.set_bits()) {
+ auto language = (LanguageType)bit;
+ error_strm.Printf(" %s\n",
+ Language::GetNameForLanguageType(language));
}
error.SetErrorString(error_strm.GetString());
}
OpenPOWER on IntegriCloud