aboutsummaryrefslogtreecommitdiff
path: root/source/Commands/CommandObjectSyntax.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/Commands/CommandObjectSyntax.cpp')
-rw-r--r--source/Commands/CommandObjectSyntax.cpp157
1 files changed, 69 insertions, 88 deletions
diff --git a/source/Commands/CommandObjectSyntax.cpp b/source/Commands/CommandObjectSyntax.cpp
index c238bccfb5dd..2b83b1b8786b 100644
--- a/source/Commands/CommandObjectSyntax.cpp
+++ b/source/Commands/CommandObjectSyntax.cpp
@@ -14,10 +14,10 @@
#include "CommandObjectSyntax.h"
#include "CommandObjectHelp.h"
#include "lldb/Interpreter/Args.h"
-#include "lldb/Interpreter/Options.h"
#include "lldb/Interpreter/CommandInterpreter.h"
-#include "lldb/Interpreter/CommandReturnObject.h"
#include "lldb/Interpreter/CommandObjectMultiword.h"
+#include "lldb/Interpreter/CommandReturnObject.h"
+#include "lldb/Interpreter/Options.h"
using namespace lldb;
using namespace lldb_private;
@@ -26,97 +26,78 @@ using namespace lldb_private;
// CommandObjectSyntax
//-------------------------------------------------------------------------
-CommandObjectSyntax::CommandObjectSyntax (CommandInterpreter &interpreter) :
- CommandObjectParsed (interpreter,
- "syntax",
- "Shows the correct syntax for a given debugger command.",
- "syntax <command>")
-{
- CommandArgumentEntry arg;
- CommandArgumentData command_arg;
+CommandObjectSyntax::CommandObjectSyntax(CommandInterpreter &interpreter)
+ : CommandObjectParsed(
+ interpreter, "syntax",
+ "Shows the correct syntax for a given debugger command.",
+ "syntax <command>") {
+ CommandArgumentEntry arg;
+ CommandArgumentData command_arg;
- // Define the first (and only) variant of this arg.
- command_arg.arg_type = eArgTypeCommandName;
- command_arg.arg_repetition = eArgRepeatPlain;
+ // Define the first (and only) variant of this arg.
+ command_arg.arg_type = eArgTypeCommandName;
+ command_arg.arg_repetition = eArgRepeatPlain;
- // There is only one variant this argument could be; put it into the argument entry.
- arg.push_back (command_arg);
+ // There is only one variant this argument could be; put it into the argument
+ // entry.
+ arg.push_back(command_arg);
- // Push the data for the first argument into the m_arguments vector.
- m_arguments.push_back (arg);
+ // Push the data for the first argument into the m_arguments vector.
+ m_arguments.push_back(arg);
}
CommandObjectSyntax::~CommandObjectSyntax() = default;
-bool
-CommandObjectSyntax::DoExecute (Args& command, CommandReturnObject &result)
-{
- CommandObject::CommandMap::iterator pos;
- CommandObject *cmd_obj;
- const size_t argc = command.GetArgumentCount();
-
- if (argc > 0)
- {
- cmd_obj = m_interpreter.GetCommandObject (command.GetArgumentAtIndex(0));
- bool all_okay = true;
- for (size_t i = 1; i < argc; ++i)
- {
- std::string sub_command = command.GetArgumentAtIndex (i);
- if (!cmd_obj->IsMultiwordObject())
- {
- all_okay = false;
- break;
- }
- else
- {
- cmd_obj = cmd_obj->GetSubcommandObject(sub_command.c_str());
- if (!cmd_obj)
- {
- all_okay = false;
- break;
- }
- }
- }
-
- if (all_okay && (cmd_obj != nullptr))
- {
- Stream &output_strm = result.GetOutputStream();
- if (cmd_obj->GetOptions() != nullptr)
- {
- output_strm.Printf ("\nSyntax: %s\n", cmd_obj->GetSyntax());
- output_strm.Printf ("(Try 'help %s' for more information on command options syntax.)\n",
- cmd_obj->GetCommandName());
- result.SetStatus (eReturnStatusSuccessFinishNoResult);
- }
- else
- {
- output_strm.Printf ("\nSyntax: %s\n", cmd_obj->GetSyntax());
- result.SetStatus (eReturnStatusSuccessFinishNoResult);
- }
- }
- else
- {
- std::string cmd_string;
- command.GetCommandString (cmd_string);
-
- StreamString error_msg_stream;
- const bool generate_apropos = true;
- const bool generate_type_lookup = false;
- CommandObjectHelp::GenerateAdditionalHelpAvenuesMessage(&error_msg_stream,
- cmd_string.c_str(),
- nullptr,
- nullptr,
- generate_apropos,
- generate_type_lookup);
- result.AppendErrorWithFormat ("%s", error_msg_stream.GetData());
- result.SetStatus (eReturnStatusFailed);
- }
- }
- else
- {
- result.AppendError ("Must call 'syntax' with a valid command.");
- result.SetStatus (eReturnStatusFailed);
- }
-
- return result.Succeeded();
+bool CommandObjectSyntax::DoExecute(Args &command,
+ CommandReturnObject &result) {
+ CommandObject::CommandMap::iterator pos;
+ CommandObject *cmd_obj;
+ const size_t argc = command.GetArgumentCount();
+
+ if (argc == 0) {
+ result.AppendError("Must call 'syntax' with a valid command.");
+ result.SetStatus(eReturnStatusFailed);
+ return false;
+ }
+
+ cmd_obj = m_interpreter.GetCommandObject(command[0].ref);
+ bool all_okay = llvm::all_of(
+ command.entries().drop_front(), [&cmd_obj](const Args::ArgEntry &e) {
+ if (!cmd_obj || !cmd_obj->IsMultiwordObject())
+ return false;
+
+ if (!(cmd_obj = cmd_obj->GetSubcommandObject(e.ref)))
+ return false;
+
+ return true;
+ });
+
+ if (!all_okay) {
+ std::string cmd_string;
+ command.GetCommandString(cmd_string);
+
+ StreamString error_msg_stream;
+ const bool generate_apropos = true;
+ const bool generate_type_lookup = false;
+ CommandObjectHelp::GenerateAdditionalHelpAvenuesMessage(
+ &error_msg_stream, cmd_string, "", "", generate_apropos,
+ generate_type_lookup);
+ result.AppendErrorWithFormat("%s", error_msg_stream.GetData());
+ result.SetStatus(eReturnStatusFailed);
+ return false;
+ }
+
+ Stream &output_strm = result.GetOutputStream();
+ if (cmd_obj->GetOptions() != nullptr) {
+ output_strm.Printf("\nSyntax: %s\n", cmd_obj->GetSyntax().str().c_str());
+ output_strm.Printf(
+ "(Try 'help %s' for more information on command options syntax.)\n",
+ cmd_obj->GetCommandName().str().c_str());
+ result.SetStatus(eReturnStatusSuccessFinishNoResult);
+ } else {
+ output_strm.Printf("\nSyntax: %s\n", cmd_obj->GetSyntax().str().c_str());
+ result.SetStatus(eReturnStatusSuccessFinishNoResult);
+ }
+
+ return result.Succeeded();
}