summaryrefslogtreecommitdiffstats
path: root/lldb/source
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source')
-rw-r--r--lldb/source/Breakpoint/BreakpointResolver.cpp3
-rw-r--r--lldb/source/Breakpoint/BreakpointResolverScripted.cpp44
-rw-r--r--lldb/source/Target/Target.cpp3
3 files changed, 16 insertions, 34 deletions
diff --git a/lldb/source/Breakpoint/BreakpointResolver.cpp b/lldb/source/Breakpoint/BreakpointResolver.cpp
index 849da4b337b..e0a4e6ac671 100644
--- a/lldb/source/Breakpoint/BreakpointResolver.cpp
+++ b/lldb/source/Breakpoint/BreakpointResolver.cpp
@@ -34,7 +34,8 @@ using namespace lldb;
// BreakpointResolver:
const char *BreakpointResolver::g_ty_to_name[] = {"FileAndLine", "Address",
"SymbolName", "SourceRegex",
- "Exception", "Unknown"};
+ "Python", "Exception",
+ "Unknown"};
const char *BreakpointResolver::g_option_names[static_cast<uint32_t>(
BreakpointResolver::OptionNames::LastOptionName)] = {
diff --git a/lldb/source/Breakpoint/BreakpointResolverScripted.cpp b/lldb/source/Breakpoint/BreakpointResolverScripted.cpp
index cbf163ed6bd..288fd37c1c7 100644
--- a/lldb/source/Breakpoint/BreakpointResolverScripted.cpp
+++ b/lldb/source/Breakpoint/BreakpointResolverScripted.cpp
@@ -29,8 +29,7 @@ BreakpointResolverScripted::BreakpointResolverScripted(
Breakpoint *bkpt,
const llvm::StringRef class_name,
lldb::SearchDepth depth,
- StructuredDataImpl *args_data,
- ScriptInterpreter &script_interp)
+ StructuredDataImpl *args_data)
: BreakpointResolver(bkpt, BreakpointResolver::PythonResolver),
m_class_name(class_name), m_depth(depth), m_args_ptr(args_data) {
CreateImplementationIfNeeded();
@@ -68,45 +67,25 @@ BreakpointResolverScripted::CreateFromStructuredData(
llvm::StringRef class_name;
bool success;
- if (!bkpt)
- return nullptr;
-
success = options_dict.GetValueForKeyAsString(
GetKey(OptionNames::PythonClassName), class_name);
if (!success) {
error.SetErrorString("BRFL::CFSD: Couldn't find class name entry.");
return nullptr;
}
- lldb::SearchDepth depth;
- int depth_as_int;
- success = options_dict.GetValueForKeyAsInteger(
- GetKey(OptionNames::SearchDepth), depth_as_int);
- if (!success) {
- error.SetErrorString("BRFL::CFSD: Couldn't find class name entry.");
- return nullptr;
- }
- if (depth_as_int >= (int) OptionNames::LastOptionName) {
- error.SetErrorString("BRFL::CFSD: Invalid value for search depth.");
- return nullptr;
- }
- depth = (lldb::SearchDepth) depth_as_int;
+ // The Python function will actually provide the search depth, this is a
+ // placeholder.
+ lldb::SearchDepth depth = lldb::eSearchDepthTarget;
StructuredDataImpl *args_data_impl = new StructuredDataImpl();
StructuredData::Dictionary *args_dict = nullptr;
success = options_dict.GetValueForKeyAsDictionary(
GetKey(OptionNames::ScriptArgs), args_dict);
if (success) {
- // FIXME: The resolver needs a copy of the ARGS dict that it can own,
- // so I need to make a copy constructor for the Dictionary so I can pass
- // that to it here. For now the args are empty.
- //StructuredData::Dictionary *dict_copy = new StructuredData::Dictionary(args_dict);
-
+ args_data_impl->SetObjectSP(args_dict->shared_from_this());
}
- ScriptInterpreter *script_interp = bkpt->GetTarget()
- .GetDebugger()
- .GetScriptInterpreter();
- return new BreakpointResolverScripted(bkpt, class_name, depth, args_data_impl,
- *script_interp);
+ return new BreakpointResolverScripted(bkpt, class_name, depth,
+ args_data_impl);
}
StructuredData::ObjectSP
@@ -116,6 +95,10 @@ BreakpointResolverScripted::SerializeToStructuredData() {
options_dict_sp->AddStringItem(GetKey(OptionNames::PythonClassName),
m_class_name);
+ if (m_args_ptr->IsValid())
+ options_dict_sp->AddItem(GetKey(OptionNames::ScriptArgs),
+ m_args_ptr->GetObjectSP());
+
return WrapOptionsDict(options_dict_sp);
}
@@ -171,11 +154,10 @@ void BreakpointResolverScripted::Dump(Stream *s) const {}
lldb::BreakpointResolverSP
BreakpointResolverScripted::CopyForBreakpoint(Breakpoint &breakpoint) {
- ScriptInterpreter *script_interp = GetScriptInterpreter();
// 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, nullptr, *script_interp));
+ new BreakpointResolverScripted(&breakpoint, m_class_name, m_depth,
+ nullptr));
return ret_sp;
}
diff --git a/lldb/source/Target/Target.cpp b/lldb/source/Target/Target.cpp
index 38406214ba1..85b0bf926f3 100644
--- a/lldb/source/Target/Target.cpp
+++ b/lldb/source/Target/Target.cpp
@@ -609,8 +609,7 @@ lldb::BreakpointSP Target::CreateScriptedBreakpoint(
extra_args_impl->SetObjectSP(extra_args_sp);
BreakpointResolverSP resolver_sp(new BreakpointResolverScripted(
- nullptr, class_name, depth, extra_args_impl,
- *GetDebugger().GetScriptInterpreter()));
+ nullptr, class_name, depth, extra_args_impl));
return CreateBreakpoint(filter_sp, resolver_sp, internal, false, true);
}
OpenPOWER on IntegriCloud