summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lldb/include/lldb/Interpreter/CommandAlias.h16
-rw-r--r--lldb/source/Commands/CommandObjectHelp.cpp2
-rw-r--r--lldb/source/Interpreter/CommandAlias.cpp112
-rw-r--r--lldb/source/Interpreter/CommandInterpreter.cpp101
4 files changed, 124 insertions, 107 deletions
diff --git a/lldb/include/lldb/Interpreter/CommandAlias.h b/lldb/include/lldb/Interpreter/CommandAlias.h
index fcc3786001c..cfe693dc2f0 100644
--- a/lldb/include/lldb/Interpreter/CommandAlias.h
+++ b/lldb/include/lldb/Interpreter/CommandAlias.h
@@ -25,16 +25,12 @@ class CommandAlias
public:
typedef std::unique_ptr<CommandAlias> UniquePointer;
- static bool
- ProcessAliasOptionsArgs (lldb::CommandObjectSP &cmd_obj_sp,
- const char *options_args,
- OptionArgVectorSP &option_arg_vector_sp);
-
- CommandAlias (lldb::CommandObjectSP cmd_sp = nullptr,
- OptionArgVectorSP args_sp = nullptr);
+ static UniquePointer
+ GetCommandAlias (lldb::CommandObjectSP cmd_sp,
+ const char *options_args);
void
- GetAliasHelp (StreamString &help_string);
+ GetAliasExpansion (StreamString &help_string);
bool
IsValid ()
@@ -50,6 +46,10 @@ public:
lldb::CommandObjectSP GetUnderlyingCommand() { return m_underlying_command_sp; }
OptionArgVectorSP GetOptionArguments() { return m_option_args_sp; }
+protected:
+ CommandAlias (lldb::CommandObjectSP cmd_sp = nullptr,
+ OptionArgVectorSP args_sp = nullptr);
+
private:
lldb::CommandObjectSP m_underlying_command_sp;
OptionArgVectorSP m_option_args_sp ;
diff --git a/lldb/source/Commands/CommandObjectHelp.cpp b/lldb/source/Commands/CommandObjectHelp.cpp
index 9f8af301352..d84de5423d0 100644
--- a/lldb/source/Commands/CommandObjectHelp.cpp
+++ b/lldb/source/Commands/CommandObjectHelp.cpp
@@ -189,7 +189,7 @@ CommandObjectHelp::DoExecute (Args& command, CommandReturnObject &result)
if (is_alias_command)
{
StreamString sstr;
- m_interpreter.GetAlias(alias_name.c_str())->GetAliasHelp(sstr);
+ m_interpreter.GetAlias(alias_name.c_str())->GetAliasExpansion(sstr);
result.GetOutputStream().Printf ("\n'%s' is an abbreviation for %s\n", alias_name.c_str(), sstr.GetData());
}
}
diff --git a/lldb/source/Interpreter/CommandAlias.cpp b/lldb/source/Interpreter/CommandAlias.cpp
index d77eeeeb357..10dc84a2c3d 100644
--- a/lldb/source/Interpreter/CommandAlias.cpp
+++ b/lldb/source/Interpreter/CommandAlias.cpp
@@ -9,3 +9,115 @@
#include "lldb/Interpreter/CommandAlias.h"
+#include "lldb/Core/StreamString.h"
+#include "lldb/Interpreter/CommandObject.h"
+#include "lldb/Interpreter/CommandReturnObject.h"
+#include "lldb/Interpreter/Options.h"
+
+using namespace lldb;
+using namespace lldb_private;
+
+static bool
+ProcessAliasOptionsArgs (lldb::CommandObjectSP &cmd_obj_sp,
+ const char *options_args,
+ OptionArgVectorSP &option_arg_vector_sp)
+{
+ bool success = true;
+ OptionArgVector *option_arg_vector = option_arg_vector_sp.get();
+
+ if (!options_args || (strlen (options_args) < 1))
+ return true;
+
+ std::string options_string (options_args);
+ Args args (options_args);
+ CommandReturnObject result;
+ // Check to see if the command being aliased can take any command options.
+ Options *options = cmd_obj_sp->GetOptions ();
+ if (options)
+ {
+ // See if any options were specified as part of the alias; if so, handle them appropriately.
+ options->NotifyOptionParsingStarting ();
+ args.Unshift ("dummy_arg");
+ args.ParseAliasOptions (*options, result, option_arg_vector, options_string);
+ args.Shift ();
+ if (result.Succeeded())
+ options->VerifyPartialOptions (result);
+ if (!result.Succeeded() && result.GetStatus() != lldb::eReturnStatusStarted)
+ {
+ result.AppendError ("Unable to create requested alias.\n");
+ return false;
+ }
+ }
+
+ if (!options_string.empty())
+ {
+ if (cmd_obj_sp->WantsRawCommandString ())
+ option_arg_vector->push_back (OptionArgPair ("<argument>",
+ OptionArgValue (-1,
+ options_string)));
+ else
+ {
+ const size_t argc = args.GetArgumentCount();
+ for (size_t i = 0; i < argc; ++i)
+ if (strcmp (args.GetArgumentAtIndex (i), "") != 0)
+ option_arg_vector->push_back
+ (OptionArgPair ("<argument>",
+ OptionArgValue (-1,
+ std::string (args.GetArgumentAtIndex (i)))));
+ }
+ }
+
+ return success;
+}
+
+CommandAlias::UniquePointer
+CommandAlias::GetCommandAlias (lldb::CommandObjectSP cmd_sp,
+ const char *options_args)
+{
+ CommandAlias::UniquePointer ret_val(nullptr);
+ OptionArgVectorSP opt_args_sp(new OptionArgVector);
+ if (ProcessAliasOptionsArgs(cmd_sp, options_args, opt_args_sp))
+ ret_val.reset(new CommandAlias(cmd_sp, opt_args_sp));
+ return ret_val;
+}
+
+CommandAlias::CommandAlias (lldb::CommandObjectSP cmd_sp,
+ OptionArgVectorSP args_sp) :
+m_underlying_command_sp(cmd_sp),
+m_option_args_sp(args_sp)
+{
+}
+
+void
+CommandAlias::GetAliasExpansion (StreamString &help_string)
+{
+ const char* command_name = m_underlying_command_sp->GetCommandName();
+ help_string.Printf ("'%s", command_name);
+
+ if (m_option_args_sp)
+ {
+ OptionArgVector *options = m_option_args_sp.get();
+ for (size_t i = 0; i < options->size(); ++i)
+ {
+ OptionArgPair cur_option = (*options)[i];
+ std::string opt = cur_option.first;
+ OptionArgValue value_pair = cur_option.second;
+ std::string value = value_pair.second;
+ if (opt.compare("<argument>") == 0)
+ {
+ help_string.Printf (" %s", value.c_str());
+ }
+ else
+ {
+ help_string.Printf (" %s", opt.c_str());
+ if ((value.compare ("<no-argument>") != 0)
+ && (value.compare ("<need-argument") != 0))
+ {
+ help_string.Printf (" %s", value.c_str());
+ }
+ }
+ }
+ }
+
+ help_string.Printf ("'");
+}
diff --git a/lldb/source/Interpreter/CommandInterpreter.cpp b/lldb/source/Interpreter/CommandInterpreter.cpp
index 6102170e72e..ec43fd6fabd 100644
--- a/lldb/source/Interpreter/CommandInterpreter.cpp
+++ b/lldb/source/Interpreter/CommandInterpreter.cpp
@@ -97,100 +97,6 @@ enum
eSpaceReplPrompts = 3
};
-CommandAlias::CommandAlias (lldb::CommandObjectSP cmd_sp,
- OptionArgVectorSP args_sp) :
- m_underlying_command_sp(cmd_sp),
- m_option_args_sp(args_sp)
-{
-}
-
-void
-CommandAlias::GetAliasHelp (StreamString &help_string)
-{
- const char* command_name = m_underlying_command_sp->GetCommandName();
- help_string.Printf ("'%s", command_name);
-
- if (m_option_args_sp)
- {
- OptionArgVector *options = m_option_args_sp.get();
- for (size_t i = 0; i < options->size(); ++i)
- {
- OptionArgPair cur_option = (*options)[i];
- std::string opt = cur_option.first;
- OptionArgValue value_pair = cur_option.second;
- std::string value = value_pair.second;
- if (opt.compare("<argument>") == 0)
- {
- help_string.Printf (" %s", value.c_str());
- }
- else
- {
- help_string.Printf (" %s", opt.c_str());
- if ((value.compare ("<no-argument>") != 0)
- && (value.compare ("<need-argument") != 0))
- {
- help_string.Printf (" %s", value.c_str());
- }
- }
- }
- }
-
- help_string.Printf ("'");
-}
-
-bool
-CommandAlias::ProcessAliasOptionsArgs (lldb::CommandObjectSP &cmd_obj_sp,
- const char *options_args,
- OptionArgVectorSP &option_arg_vector_sp)
-{
- bool success = true;
- OptionArgVector *option_arg_vector = option_arg_vector_sp.get();
-
- if (!options_args || (strlen (options_args) < 1))
- return true;
-
- std::string options_string (options_args);
- Args args (options_args);
- CommandReturnObject result;
- // Check to see if the command being aliased can take any command options.
- Options *options = cmd_obj_sp->GetOptions ();
- if (options)
- {
- // See if any options were specified as part of the alias; if so, handle them appropriately.
- options->NotifyOptionParsingStarting ();
- args.Unshift ("dummy_arg");
- args.ParseAliasOptions (*options, result, option_arg_vector, options_string);
- args.Shift ();
- if (result.Succeeded())
- options->VerifyPartialOptions (result);
- if (!result.Succeeded() && result.GetStatus() != lldb::eReturnStatusStarted)
- {
- result.AppendError ("Unable to create requested alias.\n");
- return false;
- }
- }
-
- if (!options_string.empty())
- {
- if (cmd_obj_sp->WantsRawCommandString ())
- option_arg_vector->push_back (OptionArgPair ("<argument>",
- OptionArgValue (-1,
- options_string)));
- else
- {
- const size_t argc = args.GetArgumentCount();
- for (size_t i = 0; i < argc; ++i)
- if (strcmp (args.GetArgumentAtIndex (i), "") != 0)
- option_arg_vector->push_back
- (OptionArgPair ("<argument>",
- OptionArgValue (-1,
- std::string (args.GetArgumentAtIndex (i)))));
- }
- }
-
- return success;
-}
-
ConstString &
CommandInterpreter::GetStaticBroadcasterClass ()
{
@@ -1151,10 +1057,9 @@ CommandInterpreter::AddAlias (const char *alias_name,
if (command_obj_sp.get())
assert((this == &command_obj_sp->GetCommandInterpreter()) && "tried to add a CommandObject from a different interpreter");
- OptionArgVectorSP args_sp(new OptionArgVector);
- if (CommandAlias::ProcessAliasOptionsArgs(command_obj_sp, args_string, args_sp))
+ if (auto cmd_alias = CommandAlias::GetCommandAlias(command_obj_sp, args_string))
{
- m_alias_dict[alias_name] = CommandAlias::UniquePointer(new CommandAlias(command_obj_sp,args_sp));
+ m_alias_dict[alias_name] = std::move(cmd_alias);
return true;
}
return false;
@@ -1243,7 +1148,7 @@ CommandInterpreter::GetHelp (CommandReturnObject &result,
StreamString translation_and_help;
std::string entry_name = alias_pos->first;
std::string second_entry = alias_pos->second->GetUnderlyingCommand()->GetCommandName();
- alias_pos->second->GetAliasHelp(sstr);
+ alias_pos->second->GetAliasExpansion(sstr);
translation_and_help.Printf ("(%s) %s", sstr.GetData(), alias_pos->second->GetUnderlyingCommand()->GetHelp());
OutputFormattedHelpText (result.GetOutputStream(), alias_pos->first.c_str(), "--",
OpenPOWER on IntegriCloud