summaryrefslogtreecommitdiffstats
path: root/lldb/source/Breakpoint/BreakpointResolverName.cpp
diff options
context:
space:
mode:
authorAlex Langford <apl@fb.com>2019-05-11 03:32:25 +0000
committerAlex Langford <apl@fb.com>2019-05-11 03:32:25 +0000
commit58a638b79f45dd80506cfcc23fd0483d3e3b80eb (patch)
tree7d57ec62e027bed1da264a92cf5b219851989716 /lldb/source/Breakpoint/BreakpointResolverName.cpp
parent3814d60035680054c6c8349e678046527cfae45e (diff)
downloadbcm5719-llvm-58a638b79f45dd80506cfcc23fd0483d3e3b80eb.tar.gz
bcm5719-llvm-58a638b79f45dd80506cfcc23fd0483d3e3b80eb.zip
[Breakpoint] Make breakpoint language agnostic
Summary: Breakpoint shouldn't need to depend on any specific details from a programming language. Currently the only language-specific detail it takes advantage of are the different qualified names an objective-c method name might have when adding a name lookup. This is reasonably generalizable. The current method name I introduced is "GetVariantMethodNames", which I'm not particularly tied to. If you have a better suggestion, please do let me know. Reviewers: JDevlieghere, jingham, clayborg Subscribers: mgorny, lldb-commits Differential Revision: https://reviews.llvm.org/D61746 llvm-svn: 360509
Diffstat (limited to 'lldb/source/Breakpoint/BreakpointResolverName.cpp')
-rw-r--r--lldb/source/Breakpoint/BreakpointResolverName.cpp33
1 files changed, 20 insertions, 13 deletions
diff --git a/lldb/source/Breakpoint/BreakpointResolverName.cpp b/lldb/source/Breakpoint/BreakpointResolverName.cpp
index eb6c2ebc655..3ad2e8867f2 100644
--- a/lldb/source/Breakpoint/BreakpointResolverName.cpp
+++ b/lldb/source/Breakpoint/BreakpointResolverName.cpp
@@ -8,7 +8,6 @@
#include "lldb/Breakpoint/BreakpointResolverName.h"
-#include "Plugins/Language/ObjC/ObjCLanguage.h"
#include "lldb/Breakpoint/BreakpointLocation.h"
#include "lldb/Core/Architecture.h"
#include "lldb/Core/Module.h"
@@ -17,6 +16,7 @@
#include "lldb/Symbol/Symbol.h"
#include "lldb/Symbol/SymbolContext.h"
#include "lldb/Target/Target.h"
+#include "lldb/Target/Language.h"
#include "lldb/Utility/Log.h"
#include "lldb/Utility/StreamString.h"
@@ -218,20 +218,27 @@ StructuredData::ObjectSP BreakpointResolverName::SerializeToStructuredData() {
void BreakpointResolverName::AddNameLookup(ConstString name,
FunctionNameType name_type_mask) {
- ObjCLanguage::MethodName objc_method(name.GetCString(), false);
- if (objc_method.IsValid(false)) {
- std::vector<ConstString> objc_names;
- objc_method.GetFullNames(objc_names, true);
- for (ConstString objc_name : objc_names) {
- Module::LookupInfo lookup;
- lookup.SetName(name);
- lookup.SetLookupName(objc_name);
- lookup.SetNameTypeMask(eFunctionNameTypeFull);
- m_lookups.push_back(lookup);
+
+ Module::LookupInfo lookup(name, name_type_mask, m_language);
+ m_lookups.emplace_back(lookup);
+
+ auto add_variant_funcs = [&](Language *lang) {
+ for (ConstString variant_name : lang->GetMethodNameVariants(name)) {
+ Module::LookupInfo variant_lookup(name, name_type_mask,
+ lang->GetLanguageType());
+ variant_lookup.SetLookupName(variant_name);
+ m_lookups.emplace_back(variant_lookup);
}
+ return true;
+ };
+
+ if (Language *lang = Language::FindPlugin(m_language)) {
+ add_variant_funcs(lang);
} else {
- Module::LookupInfo lookup(name, name_type_mask, m_language);
- m_lookups.push_back(lookup);
+ // Most likely m_language is eLanguageTypeUnknown. We check each language for
+ // possible variants or more qualified names and create lookups for those as
+ // well.
+ Language::ForEach(add_variant_funcs);
}
}
OpenPOWER on IntegriCloud