diff options
Diffstat (limited to 'lldb/source/Breakpoint/BreakpointResolverScripted.cpp')
-rw-r--r-- | lldb/source/Breakpoint/BreakpointResolverScripted.cpp | 61 |
1 files changed, 29 insertions, 32 deletions
diff --git a/lldb/source/Breakpoint/BreakpointResolverScripted.cpp b/lldb/source/Breakpoint/BreakpointResolverScripted.cpp index 288fd37c1c798..92297fbc7c4b3 100644 --- a/lldb/source/Breakpoint/BreakpointResolverScripted.cpp +++ b/lldb/source/Breakpoint/BreakpointResolverScripted.cpp @@ -1,4 +1,4 @@ -//===-- BreakpointResolverScripted.cpp ---------------------------*- C++ -*-===// +//===-- BreakpointResolverScripted.cpp ------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. @@ -26,43 +26,42 @@ using namespace lldb_private; // BreakpointResolverScripted: BreakpointResolverScripted::BreakpointResolverScripted( - Breakpoint *bkpt, - const llvm::StringRef class_name, - lldb::SearchDepth depth, - StructuredDataImpl *args_data) + const BreakpointSP &bkpt, const llvm::StringRef class_name, + lldb::SearchDepth depth, StructuredDataImpl *args_data) : BreakpointResolver(bkpt, BreakpointResolver::PythonResolver), - m_class_name(class_name), m_depth(depth), m_args_ptr(args_data) { - CreateImplementationIfNeeded(); + m_class_name(std::string(class_name)), m_depth(depth), + m_args_ptr(args_data) { + CreateImplementationIfNeeded(bkpt); } -void BreakpointResolverScripted::CreateImplementationIfNeeded() { +void BreakpointResolverScripted::CreateImplementationIfNeeded( + BreakpointSP breakpoint_sp) { if (m_implementation_sp) return; - + if (m_class_name.empty()) return; - - if (m_breakpoint) { - TargetSP target_sp = m_breakpoint->GetTargetSP(); - ScriptInterpreter *script_interp = target_sp->GetDebugger() - .GetScriptInterpreter(); - if (!script_interp) - return; - lldb::BreakpointSP bkpt_sp(m_breakpoint->shared_from_this()); - m_implementation_sp = script_interp->CreateScriptedBreakpointResolver( - m_class_name.c_str(), m_args_ptr, bkpt_sp); - } + + if (!breakpoint_sp) + return; + + TargetSP target_sp = breakpoint_sp->GetTargetSP(); + ScriptInterpreter *script_interp = target_sp->GetDebugger() + .GetScriptInterpreter(); + if (!script_interp) + return; + + m_implementation_sp = script_interp->CreateScriptedBreakpointResolver( + m_class_name.c_str(), m_args_ptr, breakpoint_sp); } void BreakpointResolverScripted::NotifyBreakpointSet() { - CreateImplementationIfNeeded(); + CreateImplementationIfNeeded(GetBreakpoint()); } -BreakpointResolverScripted::~BreakpointResolverScripted() {} - BreakpointResolver * BreakpointResolverScripted::CreateFromStructuredData( - Breakpoint *bkpt, const StructuredData::Dictionary &options_dict, + const BreakpointSP &bkpt, const StructuredData::Dictionary &options_dict, Status &error) { llvm::StringRef class_name; bool success; @@ -103,29 +102,27 @@ BreakpointResolverScripted::SerializeToStructuredData() { } ScriptInterpreter *BreakpointResolverScripted::GetScriptInterpreter() { - return m_breakpoint->GetTarget().GetDebugger().GetScriptInterpreter(); + return GetBreakpoint()->GetTarget().GetDebugger().GetScriptInterpreter(); } Searcher::CallbackReturn BreakpointResolverScripted::SearchCallback( SearchFilter &filter, SymbolContext &context, Address *addr) { - assert(m_breakpoint != nullptr); bool should_continue = true; if (!m_implementation_sp) return Searcher::eCallbackReturnStop; - + ScriptInterpreter *interp = GetScriptInterpreter(); should_continue = interp->ScriptedBreakpointResolverSearchCallback( m_implementation_sp, &context); if (should_continue) return Searcher::eCallbackReturnContinue; - else - return Searcher::eCallbackReturnStop; + + return Searcher::eCallbackReturnStop; } lldb::SearchDepth BreakpointResolverScripted::GetDepth() { - assert(m_breakpoint != nullptr); lldb::SearchDepth depth = lldb::eSearchDepthModule; if (m_implementation_sp) { ScriptInterpreter *interp = GetScriptInterpreter(); @@ -153,11 +150,11 @@ void BreakpointResolverScripted::GetDescription(Stream *s) { void BreakpointResolverScripted::Dump(Stream *s) const {} lldb::BreakpointResolverSP -BreakpointResolverScripted::CopyForBreakpoint(Breakpoint &breakpoint) { +BreakpointResolverScripted::CopyForBreakpoint(BreakpointSP &breakpoint) { // FIXME: Have to make a copy of the arguments from the m_args_ptr and then // pass that to the new resolver. lldb::BreakpointResolverSP ret_sp( - new BreakpointResolverScripted(&breakpoint, m_class_name, m_depth, + new BreakpointResolverScripted(breakpoint, m_class_name, m_depth, nullptr)); return ret_sp; } |