diff options
Diffstat (limited to 'lldb/source/Commands')
-rw-r--r-- | lldb/source/Commands/CommandObjectSettings.cpp | 27 | ||||
-rw-r--r-- | lldb/source/Commands/CommandObjectSettings.h | 14 |
2 files changed, 27 insertions, 14 deletions
diff --git a/lldb/source/Commands/CommandObjectSettings.cpp b/lldb/source/Commands/CommandObjectSettings.cpp index 2a8b4247275..b5e328b789c 100644 --- a/lldb/source/Commands/CommandObjectSettings.cpp +++ b/lldb/source/Commands/CommandObjectSettings.cpp @@ -690,11 +690,12 @@ CommandObjectSettingsReplace::~CommandObjectSettingsReplace () } bool -CommandObjectSettingsReplace::Execute (Args& command, CommandReturnObject &result) +CommandObjectSettingsReplace::ExecuteRawCommandString (const char *raw_command, CommandReturnObject &result) { UserSettingsControllerSP usc_sp (Debugger::GetSettingsController ()); - const int argc = command.GetArgumentCount (); + Args cmd_args(raw_command); + const int argc = cmd_args.GetArgumentCount (); if (argc < 3) { @@ -703,7 +704,7 @@ CommandObjectSettingsReplace::Execute (Args& command, CommandReturnObject &resul return false; } - const char *var_name = command.GetArgumentAtIndex (0); + const char *var_name = cmd_args.GetArgumentAtIndex (0); std::string var_name_string; if ((var_name == NULL) || (var_name[0] == '\0')) { @@ -713,9 +714,9 @@ CommandObjectSettingsReplace::Execute (Args& command, CommandReturnObject &resul } var_name_string = var_name; - command.Shift(); + cmd_args.Shift(); - const char *index_value = command.GetArgumentAtIndex (0); + const char *index_value = cmd_args.GetArgumentAtIndex (0); std::string index_value_string; if ((index_value == NULL) || (index_value[0] == '\0')) { @@ -725,15 +726,15 @@ CommandObjectSettingsReplace::Execute (Args& command, CommandReturnObject &resul } index_value_string = index_value; - command.Shift(); + cmd_args.Shift(); - const char *var_value; - std::string value_string; - - command.GetQuotedCommandString (value_string); - var_value = value_string.c_str(); + // Split the raw command into var_name, index_value, and value triple. + llvm::StringRef raw_str(raw_command); + llvm::StringRef var_value_str = raw_str.split(var_name).second.split(index_value).second; + StripLeadingSpaces(var_value_str); + std::string var_value_string = var_value_str.str(); - if ((var_value == NULL) || (var_value[0] == '\0')) + if (var_value_string.empty()) { result.AppendError ("'settings replace' command requires a valid variable value; no value supplied"); result.SetStatus (eReturnStatusFailed); @@ -741,7 +742,7 @@ CommandObjectSettingsReplace::Execute (Args& command, CommandReturnObject &resul else { Error err = usc_sp->SetVariable (var_name_string.c_str(), - var_value, + var_value_string.c_str(), eVarSetOperationReplace, true, m_interpreter.GetDebugger().GetInstanceName().AsCString(), diff --git a/lldb/source/Commands/CommandObjectSettings.h b/lldb/source/Commands/CommandObjectSettings.h index 057c86841bc..b83af5eb98e 100644 --- a/lldb/source/Commands/CommandObjectSettings.h +++ b/lldb/source/Commands/CommandObjectSettings.h @@ -212,7 +212,19 @@ public: virtual bool Execute (Args& command, - CommandReturnObject &result); + CommandReturnObject &result) + { return false; } + + virtual bool + WantsRawCommandString() { return true; } + + // Overrides base class's behavior where WantsCompletion = !WantsRawCommandString. + virtual bool + WantsCompletion() { return true; } + + virtual bool + ExecuteRawCommandString (const char *raw_command, + CommandReturnObject &result); virtual int HandleArgumentCompletion (Args &input, |