diff options
author | Alex Langford <apl@fb.com> | 2019-06-21 19:43:07 +0000 |
---|---|---|
committer | Alex Langford <apl@fb.com> | 2019-06-21 19:43:07 +0000 |
commit | 7f9c9f2264235f94b5496281cadcc4a9775dbd8f (patch) | |
tree | f3818af590c4ba9fa489cd7608295d057673e250 /lldb/source/Target/LanguageRuntime.cpp | |
parent | 4649a051bf0b80732ebe805c65a40756e883df6a (diff) | |
download | bcm5719-llvm-7f9c9f2264235f94b5496281cadcc4a9775dbd8f.tar.gz bcm5719-llvm-7f9c9f2264235f94b5496281cadcc4a9775dbd8f.zip |
[Target] Decouple ObjCLanguageRuntime from LanguageRuntime
Summary:
ObjCLanguageRuntime was being pulled into LanguageRuntime because of
Breakpoint Preconditions. If we move BreakpointPrecondition out of Breakpoint,
we can extend the LanguageRuntime plugin interface so that LanguageRuntimes
can give us a BreakpointPrecondition for exceptions.
Differential Revision: https://reviews.llvm.org/D63181
llvm-svn: 364098
Diffstat (limited to 'lldb/source/Target/LanguageRuntime.cpp')
-rw-r--r-- | lldb/source/Target/LanguageRuntime.cpp | 37 |
1 files changed, 19 insertions, 18 deletions
diff --git a/lldb/source/Target/LanguageRuntime.cpp b/lldb/source/Target/LanguageRuntime.cpp index a75f0085498..dd441581061 100644 --- a/lldb/source/Target/LanguageRuntime.cpp +++ b/lldb/source/Target/LanguageRuntime.cpp @@ -11,7 +11,6 @@ #include "lldb/Core/SearchFilter.h" #include "lldb/Interpreter/CommandInterpreter.h" #include "lldb/Target/Language.h" -#include "lldb/Target/ObjCLanguageRuntime.h" #include "lldb/Target/Target.h" using namespace lldb; @@ -224,19 +223,24 @@ LanguageRuntime::LanguageRuntime(Process *process) : m_process(process) {} LanguageRuntime::~LanguageRuntime() = default; -Breakpoint::BreakpointPreconditionSP -LanguageRuntime::CreateExceptionPrecondition(lldb::LanguageType language, - bool catch_bp, bool throw_bp) { - switch (language) { - case eLanguageTypeObjC: - if (throw_bp) - return Breakpoint::BreakpointPreconditionSP( - new ObjCLanguageRuntime::ObjCExceptionPrecondition()); - break; - default: - break; +BreakpointPreconditionSP +LanguageRuntime::GetExceptionPrecondition(LanguageType language, + bool throw_bp) { + LanguageRuntimeCreateInstance create_callback; + for (uint32_t idx = 0; + (create_callback = + PluginManager::GetLanguageRuntimeCreateCallbackAtIndex(idx)) != + nullptr; + idx++) { + if (auto precondition_callback = + PluginManager::GetLanguageRuntimeGetExceptionPreconditionAtIndex( + idx)) { + if (BreakpointPreconditionSP precond = + precondition_callback(language, throw_bp)) + return precond; + } } - return Breakpoint::BreakpointPreconditionSP(); + return BreakpointPreconditionSP(); } BreakpointSP LanguageRuntime::CreateExceptionBreakpoint( @@ -252,10 +256,8 @@ BreakpointSP LanguageRuntime::CreateExceptionBreakpoint( target.CreateBreakpoint(filter_sp, resolver_sp, is_internal, hardware, resolve_indirect_functions)); if (exc_breakpt_sp) { - Breakpoint::BreakpointPreconditionSP precondition_sp = - CreateExceptionPrecondition(language, catch_bp, throw_bp); - if (precondition_sp) - exc_breakpt_sp->SetPrecondition(precondition_sp); + if (auto precond = GetExceptionPrecondition(language, throw_bp)) + exc_breakpt_sp->SetPrecondition(precond); if (is_internal) exc_breakpt_sp->SetBreakpointKind("exception"); @@ -292,4 +294,3 @@ void LanguageRuntime::InitializeCommands(CommandObject *parent) { } } } - |