diff options
| author | Alex Langford <apl@fb.com> | 2019-05-11 03:32:25 +0000 |
|---|---|---|
| committer | Alex Langford <apl@fb.com> | 2019-05-11 03:32:25 +0000 |
| commit | 58a638b79f45dd80506cfcc23fd0483d3e3b80eb (patch) | |
| tree | 7d57ec62e027bed1da264a92cf5b219851989716 /lldb/source/Breakpoint/BreakpointResolverName.cpp | |
| parent | 3814d60035680054c6c8349e678046527cfae45e (diff) | |
| download | bcm5719-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.cpp | 33 |
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); } } |

