summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJim Ingham <jingham@apple.com>2014-08-06 00:10:12 +0000
committerJim Ingham <jingham@apple.com>2014-08-06 00:10:12 +0000
commit3b652621a990cef7b8e291beb3f5446ef4f5bfdc (patch)
tree5e4817c1de37f8393abd65adcfa4f48903609f22
parentcabf54a313d713f0b3158790fa452298908b3267 (diff)
downloadbcm5719-llvm-3b652621a990cef7b8e291beb3f5446ef4f5bfdc.tar.gz
bcm5719-llvm-3b652621a990cef7b8e291beb3f5446ef4f5bfdc.zip
Add a variant of the CommandOverrideCallback that takes a
CommandReturnObject. Otherwise, all the overridden command can do is say it overrode the command, not say what it did... Also removed the duplicate definition of CommandOverrideCallback from the private interfaces. Now to figure out how to get this through the SB API's... <rdar://problem/17911629> llvm-svn: 214938
-rw-r--r--lldb/include/lldb/Interpreter/CommandObject.h31
-rw-r--r--lldb/include/lldb/lldb-private-interfaces.h1
-rw-r--r--lldb/include/lldb/lldb-types.h3
-rw-r--r--lldb/source/Interpreter/CommandObject.cpp10
4 files changed, 29 insertions, 16 deletions
diff --git a/lldb/include/lldb/Interpreter/CommandObject.h b/lldb/include/lldb/Interpreter/CommandObject.h
index 2de19412101..7bdf55a393d 100644
--- a/lldb/include/lldb/Interpreter/CommandObject.h
+++ b/lldb/include/lldb/Interpreter/CommandObject.h
@@ -460,25 +460,37 @@ public:
return NULL;
}
- CommandOverrideCallback
- GetOverrideCallback () const
+ bool
+ HasOverrideCallback () const
{
- return m_command_override_callback;
+ return m_command_override_callback || m_deprecated_command_override_callback;
}
- void *
- GetOverrideCallbackBaton () const
+ void
+ SetOverrideCallback (lldb::CommandOverrideCallback callback, void *baton)
{
- return m_command_override_baton;
+ m_deprecated_command_override_callback = callback;
+ m_command_override_baton = baton;
}
-
+
void
- SetOverrideCallback (CommandOverrideCallback callback, void *baton)
+ SetOverrideCallback (lldb::CommandOverrideCallbackWithResult callback, void *baton)
{
m_command_override_callback = callback;
m_command_override_baton = baton;
}
+ bool
+ InvokeOverrideCallback (const char **argv, CommandReturnObject &result)
+ {
+ if (m_command_override_callback)
+ return m_command_override_callback(m_command_override_baton, argv, result);
+ else if (m_deprecated_command_override_callback)
+ return m_deprecated_command_override_callback(m_command_override_baton, argv);
+ else
+ return false;
+ }
+
virtual bool
Execute (const char *args_string, CommandReturnObject &result) = 0;
@@ -540,7 +552,8 @@ protected:
bool m_is_alias;
Flags m_flags;
std::vector<CommandArgumentEntry> m_arguments;
- CommandOverrideCallback m_command_override_callback;
+ lldb::CommandOverrideCallback m_deprecated_command_override_callback;
+ lldb::CommandOverrideCallbackWithResult m_command_override_callback;
void * m_command_override_baton;
// Helper function to populate IDs or ID ranges as the command argument data
diff --git a/lldb/include/lldb/lldb-private-interfaces.h b/lldb/include/lldb/lldb-private-interfaces.h
index e6c89ab2ed1..3251d6a9fe6 100644
--- a/lldb/include/lldb/lldb-private-interfaces.h
+++ b/lldb/include/lldb/lldb-private-interfaces.h
@@ -40,7 +40,6 @@ namespace lldb_private
typedef lldb::ThreadPlanSP (*ThreadPlanStepFromHereCallback) (ThreadPlan *current_plan, Flags &flags, lldb::FrameComparison operation, void *baton);
typedef UnwindAssembly* (*UnwindAssemblyCreateInstance) (const ArchSpec &arch);
typedef int (*ComparisonFunction)(const void *, const void *);
- typedef bool (*CommandOverrideCallback)(void *baton, const char **argv);
typedef void (*DebuggerInitializeCallback)(Debugger &debugger);
} // namespace lldb_private
diff --git a/lldb/include/lldb/lldb-types.h b/lldb/include/lldb/lldb-types.h
index bafe13b424a..b27f0875d3a 100644
--- a/lldb/include/lldb/lldb-types.h
+++ b/lldb/include/lldb/lldb-types.h
@@ -81,6 +81,9 @@ namespace lldb
{
typedef void (*LogOutputCallback) (const char *, void *baton);
typedef bool (*CommandOverrideCallback)(void *baton, const char **argv);
+ typedef bool (*CommandOverrideCallbackWithResult)(void *baton,
+ const char **argv,
+ lldb_private::CommandReturnObject &result);
typedef bool (*ExpressionCancelCallback) (ExpressionEvaluationPhase phase, void *baton);
}
diff --git a/lldb/source/Interpreter/CommandObject.cpp b/lldb/source/Interpreter/CommandObject.cpp
index cb2e5d5e8d7..62a8475ae1c 100644
--- a/lldb/source/Interpreter/CommandObject.cpp
+++ b/lldb/source/Interpreter/CommandObject.cpp
@@ -1005,14 +1005,13 @@ CommandObject::GetArgumentDescriptionAsCString (const lldb::CommandArgumentType
bool
CommandObjectParsed::Execute (const char *args_string, CommandReturnObject &result)
{
- CommandOverrideCallback command_callback = GetOverrideCallback();
bool handled = false;
Args cmd_args (args_string);
- if (command_callback)
+ if (HasOverrideCallback())
{
Args full_args (GetCommandName ());
full_args.AppendArguments(cmd_args);
- handled = command_callback (GetOverrideCallbackBaton(), full_args.GetConstArgumentVector());
+ handled = InvokeOverrideCallback (full_args.GetConstArgumentVector(), result);
}
if (!handled)
{
@@ -1040,16 +1039,15 @@ CommandObjectParsed::Execute (const char *args_string, CommandReturnObject &resu
bool
CommandObjectRaw::Execute (const char *args_string, CommandReturnObject &result)
{
- CommandOverrideCallback command_callback = GetOverrideCallback();
bool handled = false;
- if (command_callback)
+ if (HasOverrideCallback())
{
std::string full_command (GetCommandName ());
full_command += ' ';
full_command += args_string;
const char *argv[2] = { nullptr, nullptr };
argv[0] = full_command.c_str();
- handled = command_callback (GetOverrideCallbackBaton(), argv);
+ handled = InvokeOverrideCallback (argv, result);
}
if (!handled)
{
OpenPOWER on IntegriCloud