summaryrefslogtreecommitdiffstats
path: root/lldb/source/Interpreter/CommandInterpreter.cpp
diff options
context:
space:
mode:
authorEnrico Granata <egranata@apple.com>2016-03-08 05:37:15 +0000
committerEnrico Granata <egranata@apple.com>2016-03-08 05:37:15 +0000
commit212130ac4d517379afdc1b1eb3b861fd98f304f3 (patch)
treeb9f25e35e7b6c1f9ee1f47bc7e3d926081aff0ad /lldb/source/Interpreter/CommandInterpreter.cpp
parent3f9f09265b59904a9819c4f7830941ff5918b736 (diff)
downloadbcm5719-llvm-212130ac4d517379afdc1b1eb3b861fd98f304f3.tar.gz
bcm5719-llvm-212130ac4d517379afdc1b1eb3b861fd98f304f3.zip
A few more improvements on the way to the command alias refactoring
- move alias help generation to CommandAlias, out of CommandInterpreter - make alias creation use argument strings instead of OptionArgVectorSP; the former is a more reasonable currency than the latter - remove m_is_alias from CommandObject, it wasn't actually being used llvm-svn: 262912
Diffstat (limited to 'lldb/source/Interpreter/CommandInterpreter.cpp')
-rw-r--r--lldb/source/Interpreter/CommandInterpreter.cpp200
1 files changed, 96 insertions, 104 deletions
diff --git a/lldb/source/Interpreter/CommandInterpreter.cpp b/lldb/source/Interpreter/CommandInterpreter.cpp
index 2c8699d2579..11009f6f211 100644
--- a/lldb/source/Interpreter/CommandInterpreter.cpp
+++ b/lldb/source/Interpreter/CommandInterpreter.cpp
@@ -104,6 +104,40 @@ CommandInterpreter::CommandAlias::CommandAlias (lldb::CommandObjectSP cmd_sp,
{
}
+void
+CommandInterpreter::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
CommandInterpreter::CommandAlias::ProcessAliasOptionsArgs (lldb::CommandObjectSP &cmd_obj_sp,
const char *options_args,
@@ -252,149 +286,145 @@ CommandInterpreter::Initialize ()
CommandObjectSP cmd_obj_sp = GetCommandSPExact ("quit", false);
if (cmd_obj_sp)
{
- AddAlias ("q", cmd_obj_sp, alias_arguments_vector_sp);
- AddAlias ("exit", cmd_obj_sp, alias_arguments_vector_sp);
+ AddAlias ("q", cmd_obj_sp);
+ AddAlias ("exit", cmd_obj_sp);
}
cmd_obj_sp = GetCommandSPExact ("_regexp-attach",false);
if (cmd_obj_sp)
{
- AddAlias ("attach", cmd_obj_sp, alias_arguments_vector_sp);
+ AddAlias ("attach", cmd_obj_sp);
}
cmd_obj_sp = GetCommandSPExact ("process detach",false);
if (cmd_obj_sp)
{
- AddAlias ("detach", cmd_obj_sp, alias_arguments_vector_sp);
+ AddAlias ("detach", cmd_obj_sp);
}
cmd_obj_sp = GetCommandSPExact ("process continue", false);
if (cmd_obj_sp)
{
- AddAlias ("c", cmd_obj_sp, alias_arguments_vector_sp);
- AddAlias ("continue", cmd_obj_sp, alias_arguments_vector_sp);
+ AddAlias ("c", cmd_obj_sp);
+ AddAlias ("continue", cmd_obj_sp);
}
cmd_obj_sp = GetCommandSPExact ("_regexp-break",false);
if (cmd_obj_sp)
- AddAlias ("b", cmd_obj_sp, alias_arguments_vector_sp);
+ AddAlias ("b", cmd_obj_sp);
cmd_obj_sp = GetCommandSPExact ("_regexp-tbreak",false);
if (cmd_obj_sp)
- AddAlias ("tbreak", cmd_obj_sp, alias_arguments_vector_sp);
+ AddAlias ("tbreak", cmd_obj_sp);
cmd_obj_sp = GetCommandSPExact ("thread step-inst", false);
if (cmd_obj_sp)
{
- AddAlias ("stepi", cmd_obj_sp, alias_arguments_vector_sp);
- AddAlias ("si", cmd_obj_sp, alias_arguments_vector_sp);
+ AddAlias ("stepi", cmd_obj_sp);
+ AddAlias ("si", cmd_obj_sp);
}
cmd_obj_sp = GetCommandSPExact ("thread step-inst-over", false);
if (cmd_obj_sp)
{
- AddAlias ("nexti", cmd_obj_sp, alias_arguments_vector_sp);
- AddAlias ("ni", cmd_obj_sp, alias_arguments_vector_sp);
+ AddAlias ("nexti", cmd_obj_sp);
+ AddAlias ("ni", cmd_obj_sp);
}
cmd_obj_sp = GetCommandSPExact ("thread step-in", false);
if (cmd_obj_sp)
{
- AddAlias ("s", cmd_obj_sp, alias_arguments_vector_sp);
- AddAlias ("step", cmd_obj_sp, alias_arguments_vector_sp);
-
- alias_arguments_vector_sp.reset (new OptionArgVector);
- CommandAlias::ProcessAliasOptionsArgs (cmd_obj_sp, "--end-linenumber block --step-in-target %1", alias_arguments_vector_sp);
- AddAlias ("sif", cmd_obj_sp, alias_arguments_vector_sp);
- alias_arguments_vector_sp.reset(new OptionArgVector);
+ AddAlias ("s", cmd_obj_sp);
+ AddAlias ("step", cmd_obj_sp);
+ AddAlias ("sif", cmd_obj_sp, "--end-linenumber block --step-in-target %1");
}
cmd_obj_sp = GetCommandSPExact ("thread step-over", false);
if (cmd_obj_sp)
{
- AddAlias ("n", cmd_obj_sp, alias_arguments_vector_sp);
- AddAlias ("next", cmd_obj_sp, alias_arguments_vector_sp);
+ AddAlias ("n", cmd_obj_sp);
+ AddAlias ("next", cmd_obj_sp);
}
cmd_obj_sp = GetCommandSPExact ("thread step-out", false);
if (cmd_obj_sp)
{
- AddAlias ("finish", cmd_obj_sp, alias_arguments_vector_sp);
+ AddAlias ("finish", cmd_obj_sp);
}
cmd_obj_sp = GetCommandSPExact ("frame select", false);
if (cmd_obj_sp)
{
- AddAlias ("f", cmd_obj_sp, alias_arguments_vector_sp);
+ AddAlias ("f", cmd_obj_sp);
}
cmd_obj_sp = GetCommandSPExact ("thread select", false);
if (cmd_obj_sp)
{
- AddAlias ("t", cmd_obj_sp, alias_arguments_vector_sp);
+ AddAlias ("t", cmd_obj_sp);
}
cmd_obj_sp = GetCommandSPExact ("_regexp-jump",false);
if (cmd_obj_sp)
{
- AddAlias ("j", cmd_obj_sp, alias_arguments_vector_sp);
- AddAlias ("jump", cmd_obj_sp, alias_arguments_vector_sp);
+ AddAlias ("j", cmd_obj_sp);
+ AddAlias ("jump", cmd_obj_sp);
}
cmd_obj_sp = GetCommandSPExact ("_regexp-list", false);
if (cmd_obj_sp)
{
- AddAlias ("l", cmd_obj_sp, alias_arguments_vector_sp);
- AddAlias ("list", cmd_obj_sp, alias_arguments_vector_sp);
+ AddAlias ("l", cmd_obj_sp);
+ AddAlias ("list", cmd_obj_sp);
}
cmd_obj_sp = GetCommandSPExact ("_regexp-env", false);
if (cmd_obj_sp)
{
- AddAlias ("env", cmd_obj_sp, alias_arguments_vector_sp);
+ AddAlias ("env", cmd_obj_sp);
}
cmd_obj_sp = GetCommandSPExact ("memory read", false);
if (cmd_obj_sp)
- AddAlias ("x", cmd_obj_sp, alias_arguments_vector_sp);
+ AddAlias ("x", cmd_obj_sp);
cmd_obj_sp = GetCommandSPExact ("_regexp-up", false);
if (cmd_obj_sp)
- AddAlias ("up", cmd_obj_sp, alias_arguments_vector_sp);
+ AddAlias ("up", cmd_obj_sp);
cmd_obj_sp = GetCommandSPExact ("_regexp-down", false);
if (cmd_obj_sp)
- AddAlias ("down", cmd_obj_sp, alias_arguments_vector_sp);
+ AddAlias ("down", cmd_obj_sp);
cmd_obj_sp = GetCommandSPExact ("_regexp-display", false);
if (cmd_obj_sp)
- AddAlias ("display", cmd_obj_sp, alias_arguments_vector_sp);
+ AddAlias ("display", cmd_obj_sp);
cmd_obj_sp = GetCommandSPExact ("disassemble", false);
if (cmd_obj_sp)
- AddAlias ("dis", cmd_obj_sp, alias_arguments_vector_sp);
+ AddAlias ("dis", cmd_obj_sp);
cmd_obj_sp = GetCommandSPExact ("disassemble", false);
if (cmd_obj_sp)
- AddAlias ("di", cmd_obj_sp, alias_arguments_vector_sp);
+ AddAlias ("di", cmd_obj_sp);
cmd_obj_sp = GetCommandSPExact ("_regexp-undisplay", false);
if (cmd_obj_sp)
- AddAlias ("undisplay", cmd_obj_sp, alias_arguments_vector_sp);
+ AddAlias ("undisplay", cmd_obj_sp);
cmd_obj_sp = GetCommandSPExact ("_regexp-bt", false);
if (cmd_obj_sp)
- AddAlias ("bt", cmd_obj_sp, alias_arguments_vector_sp);
+ AddAlias ("bt", cmd_obj_sp);
cmd_obj_sp = GetCommandSPExact ("target create", false);
if (cmd_obj_sp)
- AddAlias ("file", cmd_obj_sp, alias_arguments_vector_sp);
+ AddAlias ("file", cmd_obj_sp);
cmd_obj_sp = GetCommandSPExact ("target modules", false);
if (cmd_obj_sp)
- AddAlias ("image", cmd_obj_sp, alias_arguments_vector_sp);
+ AddAlias ("image", cmd_obj_sp);
alias_arguments_vector_sp.reset(new OptionArgVector);
@@ -402,20 +432,16 @@ CommandInterpreter::Initialize ()
cmd_obj_sp = GetCommandSPExact ("expression", false);
if (cmd_obj_sp)
{
- CommandAlias::ProcessAliasOptionsArgs (cmd_obj_sp, "--", alias_arguments_vector_sp);
- AddAlias ("p", cmd_obj_sp, alias_arguments_vector_sp);
- AddAlias ("print", cmd_obj_sp, alias_arguments_vector_sp);
- AddAlias ("call", cmd_obj_sp, alias_arguments_vector_sp);
- alias_arguments_vector_sp.reset (new OptionArgVector);
- CommandAlias::ProcessAliasOptionsArgs (cmd_obj_sp, "-O -- ", alias_arguments_vector_sp);
- AddAlias ("po", cmd_obj_sp, alias_arguments_vector_sp);
- alias_arguments_vector_sp.reset(new OptionArgVector);
+ AddAlias ("p", cmd_obj_sp, "--");
+ AddAlias ("print", cmd_obj_sp, "--");
+ AddAlias ("call", cmd_obj_sp, "--");
+ AddAlias ("po", cmd_obj_sp, "-O --");
}
cmd_obj_sp = GetCommandSPExact ("process kill", false);
if (cmd_obj_sp)
{
- AddAlias ("kill", cmd_obj_sp, alias_arguments_vector_sp);
+ AddAlias ("kill", cmd_obj_sp);
}
cmd_obj_sp = GetCommandSPExact ("process launch", false);
@@ -423,40 +449,35 @@ CommandInterpreter::Initialize ()
{
alias_arguments_vector_sp.reset (new OptionArgVector);
#if defined (__arm__) || defined (__arm64__) || defined (__aarch64__)
- ProcessAliasOptionsArgs (cmd_obj_sp, "--", alias_arguments_vector_sp);
+ AddAlias ("r", cmd_obj_sp, "--");
+ AddAlias ("run", cmd_obj_sp, "--");
#else
#if defined(__APPLE__)
std::string shell_option;
shell_option.append("--shell-expand-args");
shell_option.append(" true");
shell_option.append(" --");
- CommandAlias::ProcessAliasOptionsArgs (cmd_obj_sp, shell_option.c_str(), alias_arguments_vector_sp);
+ AddAlias ("r", cmd_obj_sp, "--shell-expand-args true --");
+ AddAlias ("run", cmd_obj_sp, "--shell-expand-args true --");
#else
- std::string shell_option;
- shell_option.append("--shell=");
- shell_option.append(HostInfo::GetDefaultShell().GetPath());
- shell_option.append(" --");
- CommandAlias::ProcessAliasOptionsArgs (cmd_obj_sp, shell_option.c_str(), alias_arguments_vector_sp);
+ StreamString defaultshell;
+ defaultshell.Printf("--shell=%s --", HostInfo::GetDefaultShell().GetPath());
+ AddAlias ("r", cmd_obj_sp, defaultshell.GetData());
+ AddAlias ("run", cmd_obj_sp, defaultshell.GetData());
#endif
#endif
- AddAlias ("r", cmd_obj_sp, alias_arguments_vector_sp);
- AddAlias ("run", cmd_obj_sp, alias_arguments_vector_sp);
- alias_arguments_vector_sp.reset(new OptionArgVector);
}
cmd_obj_sp = GetCommandSPExact ("target symbols add", false);
if (cmd_obj_sp)
{
- AddAlias ("add-dsym", cmd_obj_sp, alias_arguments_vector_sp);
+ AddAlias ("add-dsym", cmd_obj_sp);
}
cmd_obj_sp = GetCommandSPExact ("breakpoint set", false);
if (cmd_obj_sp)
{
- alias_arguments_vector_sp.reset (new OptionArgVector);
- CommandAlias::ProcessAliasOptionsArgs (cmd_obj_sp, "--func-regex %1", alias_arguments_vector_sp);
- AddAlias ("rbreak", cmd_obj_sp, alias_arguments_vector_sp);
- alias_arguments_vector_sp.reset(new OptionArgVector);
+ AddAlias ("rbreak", cmd_obj_sp, "--func-regex %1");
}
}
@@ -1122,16 +1143,21 @@ CommandInterpreter::UserCommandExists (const char *cmd)
return m_user_dict.find(cmd) != m_user_dict.end();
}
-void
+bool
CommandInterpreter::AddAlias (const char *alias_name,
- CommandObjectSP& command_obj_sp,
- OptionArgVectorSP args_sp)
+ lldb::CommandObjectSP& command_obj_sp,
+ const char *args_string)
{
if (command_obj_sp.get())
assert((this == &command_obj_sp->GetCommandInterpreter()) && "tried to add a CommandObject from a different interpreter");
-
- command_obj_sp->SetIsAlias (true);
- m_alias_dict[alias_name] = {command_obj_sp,args_sp};
+
+ OptionArgVectorSP args_sp(new OptionArgVector);
+ if (CommandAlias::ProcessAliasOptionsArgs(command_obj_sp, args_string, args_sp))
+ {
+ m_alias_dict[alias_name] = CommandAlias(command_obj_sp,args_sp);
+ return true;
+ }
+ return false;
}
bool
@@ -1174,40 +1200,6 @@ CommandInterpreter::RemoveUser (const char *alias_name)
}
void
-CommandInterpreter::GetAliasHelp (const char *alias_name, const char *command_name, StreamString &help_string)
-{
- help_string.Printf ("'%s", command_name);
- OptionArgVectorSP option_arg_vector_sp = GetAlias(alias_name).m_option_args_sp;
-
- if (option_arg_vector_sp)
- {
- OptionArgVector *options = option_arg_vector_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 ("'");
-}
-
-void
CommandInterpreter::GetHelp (CommandReturnObject &result,
uint32_t cmd_types)
{
@@ -1251,7 +1243,7 @@ CommandInterpreter::GetHelp (CommandReturnObject &result,
StreamString translation_and_help;
std::string entry_name = alias_pos->first;
std::string second_entry = alias_pos->second.m_underlying_command_sp->GetCommandName();
- GetAliasHelp (alias_pos->first.c_str(), alias_pos->second.m_underlying_command_sp->GetCommandName(), sstr);
+ alias_pos->second.GetAliasHelp(sstr);
translation_and_help.Printf ("(%s) %s", sstr.GetData(), alias_pos->second.m_underlying_command_sp->GetHelp());
OutputFormattedHelpText (result.GetOutputStream(), alias_pos->first.c_str(), "--",
OpenPOWER on IntegriCloud