summaryrefslogtreecommitdiff
path: root/contrib/llvm/tools/lldb/source/Commands/CommandObjectSettings.cpp
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2019-12-20 19:53:05 +0000
committerDimitry Andric <dim@FreeBSD.org>2019-12-20 19:53:05 +0000
commit0b57cec536236d46e3dba9bd041533462f33dbb7 (patch)
tree56229dbdbbf76d18580f72f789003db17246c8d9 /contrib/llvm/tools/lldb/source/Commands/CommandObjectSettings.cpp
parent718ef55ec7785aae63f98f8ca05dc07ed399c16d (diff)
Notes
Diffstat (limited to 'contrib/llvm/tools/lldb/source/Commands/CommandObjectSettings.cpp')
-rw-r--r--contrib/llvm/tools/lldb/source/Commands/CommandObjectSettings.cpp1186
1 files changed, 0 insertions, 1186 deletions
diff --git a/contrib/llvm/tools/lldb/source/Commands/CommandObjectSettings.cpp b/contrib/llvm/tools/lldb/source/Commands/CommandObjectSettings.cpp
deleted file mode 100644
index 55a0002c5997..000000000000
--- a/contrib/llvm/tools/lldb/source/Commands/CommandObjectSettings.cpp
+++ /dev/null
@@ -1,1186 +0,0 @@
-//===-- CommandObjectSettings.cpp -------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#include "CommandObjectSettings.h"
-
-#include "llvm/ADT/StringRef.h"
-
-#include "lldb/Host/OptionParser.h"
-#include "lldb/Interpreter/CommandCompletions.h"
-#include "lldb/Interpreter/CommandInterpreter.h"
-#include "lldb/Interpreter/CommandReturnObject.h"
-#include "lldb/Interpreter/OptionValueProperties.h"
-
-using namespace lldb;
-using namespace lldb_private;
-
-// CommandObjectSettingsSet
-
-static constexpr OptionDefinition g_settings_set_options[] = {
-#define LLDB_OPTIONS_settings_set
-#include "CommandOptions.inc"
-};
-
-class CommandObjectSettingsSet : public CommandObjectRaw {
-public:
- CommandObjectSettingsSet(CommandInterpreter &interpreter)
- : CommandObjectRaw(interpreter, "settings set",
- "Set the value of the specified debugger setting."),
- m_options() {
- CommandArgumentEntry arg1;
- CommandArgumentEntry arg2;
- CommandArgumentData var_name_arg;
- CommandArgumentData value_arg;
-
- // Define the first (and only) variant of this arg.
- var_name_arg.arg_type = eArgTypeSettingVariableName;
- var_name_arg.arg_repetition = eArgRepeatPlain;
-
- // There is only one variant this argument could be; put it into the
- // argument entry.
- arg1.push_back(var_name_arg);
-
- // Define the first (and only) variant of this arg.
- value_arg.arg_type = eArgTypeValue;
- value_arg.arg_repetition = eArgRepeatPlain;
-
- // There is only one variant this argument could be; put it into the
- // argument entry.
- arg2.push_back(value_arg);
-
- // Push the data for the first argument into the m_arguments vector.
- m_arguments.push_back(arg1);
- m_arguments.push_back(arg2);
-
- SetHelpLong(
- "\nWhen setting a dictionary or array variable, you can set multiple entries \
-at once by giving the values to the set command. For example:"
- R"(
-
-(lldb) settings set target.run-args value1 value2 value3
-(lldb) settings set target.env-vars MYPATH=~/.:/usr/bin SOME_ENV_VAR=12345
-
-(lldb) settings show target.run-args
- [0]: 'value1'
- [1]: 'value2'
- [3]: 'value3'
-(lldb) settings show target.env-vars
- 'MYPATH=~/.:/usr/bin'
- 'SOME_ENV_VAR=12345'
-
-)"
- "Warning: The 'set' command re-sets the entire array or dictionary. If you \
-just want to add, remove or update individual values (or add something to \
-the end), use one of the other settings sub-commands: append, replace, \
-insert-before or insert-after.");
- }
-
- ~CommandObjectSettingsSet() override = default;
-
- // Overrides base class's behavior where WantsCompletion =
- // !WantsRawCommandString.
- bool WantsCompletion() override { return true; }
-
- Options *GetOptions() override { return &m_options; }
-
- class CommandOptions : public Options {
- public:
- CommandOptions() : Options(), m_global(false) {}
-
- ~CommandOptions() override = default;
-
- Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_arg,
- ExecutionContext *execution_context) override {
- Status error;
- const int short_option = m_getopt_table[option_idx].val;
-
- switch (short_option) {
- case 'f':
- m_force = true;
- break;
- case 'g':
- m_global = true;
- break;
- default:
- error.SetErrorStringWithFormat("unrecognized options '%c'",
- short_option);
- break;
- }
-
- return error;
- }
-
- void OptionParsingStarting(ExecutionContext *execution_context) override {
- m_global = false;
- m_force = false;
- }
-
- llvm::ArrayRef<OptionDefinition> GetDefinitions() override {
- return llvm::makeArrayRef(g_settings_set_options);
- }
-
- // Instance variables to hold the values for command options.
- bool m_global;
- bool m_force;
- };
-
- int HandleArgumentCompletion(
- CompletionRequest &request,
- OptionElementVector &opt_element_vector) override {
-
- const size_t argc = request.GetParsedLine().GetArgumentCount();
- const char *arg = nullptr;
- int setting_var_idx;
- for (setting_var_idx = 0; setting_var_idx < static_cast<int>(argc);
- ++setting_var_idx) {
- arg = request.GetParsedLine().GetArgumentAtIndex(setting_var_idx);
- if (arg && arg[0] != '-')
- break; // We found our setting variable name index
- }
- if (request.GetCursorIndex() == setting_var_idx) {
- // Attempting to complete setting variable name
- CommandCompletions::InvokeCommonCompletionCallbacks(
- GetCommandInterpreter(), CommandCompletions::eSettingsNameCompletion,
- request, nullptr);
- } else {
- arg =
- request.GetParsedLine().GetArgumentAtIndex(request.GetCursorIndex());
-
- if (arg) {
- if (arg[0] == '-') {
- // Complete option name
- } else {
- // Complete setting value
- const char *setting_var_name =
- request.GetParsedLine().GetArgumentAtIndex(setting_var_idx);
- Status error;
- lldb::OptionValueSP value_sp(GetDebugger().GetPropertyValue(
- &m_exe_ctx, setting_var_name, false, error));
- if (value_sp) {
- value_sp->AutoComplete(m_interpreter, request);
- }
- }
- }
- }
- return request.GetNumberOfMatches();
- }
-
-protected:
- bool DoExecute(llvm::StringRef command,
- CommandReturnObject &result) override {
- Args cmd_args(command);
-
- // Process possible options.
- if (!ParseOptions(cmd_args, result))
- return false;
-
- const size_t min_argc = m_options.m_force ? 1 : 2;
- const size_t argc = cmd_args.GetArgumentCount();
-
- if ((argc < min_argc) && (!m_options.m_global)) {
- result.AppendError("'settings set' takes more arguments");
- result.SetStatus(eReturnStatusFailed);
- return false;
- }
-
- const char *var_name = cmd_args.GetArgumentAtIndex(0);
- if ((var_name == nullptr) || (var_name[0] == '\0')) {
- result.AppendError(
- "'settings set' command requires a valid variable name");
- result.SetStatus(eReturnStatusFailed);
- return false;
- }
-
- // A missing value corresponds to clearing the setting when "force" is
- // specified.
- if (argc == 1 && m_options.m_force) {
- Status error(GetDebugger().SetPropertyValue(
- &m_exe_ctx, eVarSetOperationClear, var_name, llvm::StringRef()));
- if (error.Fail()) {
- result.AppendError(error.AsCString());
- result.SetStatus(eReturnStatusFailed);
- return false;
- }
- return result.Succeeded();
- }
-
- // Split the raw command into var_name and value pair.
- llvm::StringRef raw_str(command);
- std::string var_value_string = raw_str.split(var_name).second.str();
- const char *var_value_cstr =
- Args::StripSpaces(var_value_string, true, false, false);
-
- Status error;
- if (m_options.m_global) {
- error = GetDebugger().SetPropertyValue(nullptr, eVarSetOperationAssign,
- var_name, var_value_cstr);
- }
-
- if (error.Success()) {
- // FIXME this is the same issue as the one in commands script import
- // we could be setting target.load-script-from-symbol-file which would
- // cause Python scripts to be loaded, which could run LLDB commands (e.g.
- // settings set target.process.python-os-plugin-path) and cause a crash
- // if we did not clear the command's exe_ctx first
- ExecutionContext exe_ctx(m_exe_ctx);
- m_exe_ctx.Clear();
- error = GetDebugger().SetPropertyValue(&exe_ctx, eVarSetOperationAssign,
- var_name, var_value_cstr);
- }
-
- if (error.Fail()) {
- result.AppendError(error.AsCString());
- result.SetStatus(eReturnStatusFailed);
- return false;
- } else {
- result.SetStatus(eReturnStatusSuccessFinishResult);
- }
-
- return result.Succeeded();
- }
-
-private:
- CommandOptions m_options;
-};
-
-// CommandObjectSettingsShow -- Show current values
-
-class CommandObjectSettingsShow : public CommandObjectParsed {
-public:
- CommandObjectSettingsShow(CommandInterpreter &interpreter)
- : CommandObjectParsed(interpreter, "settings show",
- "Show matching debugger settings and their current "
- "values. Defaults to showing all settings.",
- nullptr) {
- CommandArgumentEntry arg1;
- CommandArgumentData var_name_arg;
-
- // Define the first (and only) variant of this arg.
- var_name_arg.arg_type = eArgTypeSettingVariableName;
- var_name_arg.arg_repetition = eArgRepeatOptional;
-
- // There is only one variant this argument could be; put it into the
- // argument entry.
- arg1.push_back(var_name_arg);
-
- // Push the data for the first argument into the m_arguments vector.
- m_arguments.push_back(arg1);
- }
-
- ~CommandObjectSettingsShow() override = default;
-
- int HandleArgumentCompletion(
- CompletionRequest &request,
- OptionElementVector &opt_element_vector) override {
- CommandCompletions::InvokeCommonCompletionCallbacks(
- GetCommandInterpreter(), CommandCompletions::eSettingsNameCompletion,
- request, nullptr);
- return request.GetNumberOfMatches();
- }
-
-protected:
- bool DoExecute(Args &args, CommandReturnObject &result) override {
- result.SetStatus(eReturnStatusSuccessFinishResult);
-
- if (!args.empty()) {
- for (const auto &arg : args) {
- Status error(GetDebugger().DumpPropertyValue(
- &m_exe_ctx, result.GetOutputStream(), arg.ref,
- OptionValue::eDumpGroupValue));
- if (error.Success()) {
- result.GetOutputStream().EOL();
- } else {
- result.AppendError(error.AsCString());
- result.SetStatus(eReturnStatusFailed);
- }
- }
- } else {
- GetDebugger().DumpAllPropertyValues(&m_exe_ctx, result.GetOutputStream(),
- OptionValue::eDumpGroupValue);
- }
-
- return result.Succeeded();
- }
-};
-
-// CommandObjectSettingsWrite -- Write settings to file
-
-static constexpr OptionDefinition g_settings_write_options[] = {
-#define LLDB_OPTIONS_settings_write
-#include "CommandOptions.inc"
-};
-
-class CommandObjectSettingsWrite : public CommandObjectParsed {
-public:
- CommandObjectSettingsWrite(CommandInterpreter &interpreter)
- : CommandObjectParsed(
- interpreter, "settings export",
- "Write matching debugger settings and their "
- "current values to a file that can be read in with "
- "\"settings read\". Defaults to writing all settings.",
- nullptr),
- m_options() {
- CommandArgumentEntry arg1;
- CommandArgumentData var_name_arg;
-
- // Define the first (and only) variant of this arg.
- var_name_arg.arg_type = eArgTypeSettingVariableName;
- var_name_arg.arg_repetition = eArgRepeatOptional;
-
- // There is only one variant this argument could be; put it into the
- // argument entry.
- arg1.push_back(var_name_arg);
-
- // Push the data for the first argument into the m_arguments vector.
- m_arguments.push_back(arg1);
- }
-
- ~CommandObjectSettingsWrite() override = default;
-
- Options *GetOptions() override { return &m_options; }
-
- class CommandOptions : public Options {
- public:
- CommandOptions() : Options() {}
-
- ~CommandOptions() override = default;
-
- Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_arg,
- ExecutionContext *execution_context) override {
- Status error;
- const int short_option = m_getopt_table[option_idx].val;
-
- switch (short_option) {
- case 'f':
- m_filename.assign(option_arg);
- break;
- case 'a':
- m_append = true;
- break;
- default:
- error.SetErrorStringWithFormat("unrecognized option '%c'",
- short_option);
- break;
- }
-
- return error;
- }
-
- void OptionParsingStarting(ExecutionContext *execution_context) override {
- m_filename.clear();
- m_append = false;
- }
-
- llvm::ArrayRef<OptionDefinition> GetDefinitions() override {
- return llvm::makeArrayRef(g_settings_write_options);
- }
-
- // Instance variables to hold the values for command options.
- std::string m_filename;
- bool m_append = false;
- };
-
-protected:
- bool DoExecute(Args &args, CommandReturnObject &result) override {
- FileSpec file_spec(m_options.m_filename);
- FileSystem::Instance().Resolve(file_spec);
- std::string path(file_spec.GetPath());
- uint32_t options = File::OpenOptions::eOpenOptionWrite |
- File::OpenOptions::eOpenOptionCanCreate;
- if (m_options.m_append)
- options |= File::OpenOptions::eOpenOptionAppend;
- else
- options |= File::OpenOptions::eOpenOptionTruncate;
-
- StreamFile out_file(path.c_str(), options,
- lldb::eFilePermissionsFileDefault);
-
- if (!out_file.GetFile().IsValid()) {
- result.AppendErrorWithFormat("%s: unable to write to file", path.c_str());
- result.SetStatus(eReturnStatusFailed);
- return false;
- }
-
- // Exporting should not be context sensitive.
- ExecutionContext clean_ctx;
-
- if (args.empty()) {
- GetDebugger().DumpAllPropertyValues(&clean_ctx, out_file,
- OptionValue::eDumpGroupExport);
- return result.Succeeded();
- }
-
- for (const auto &arg : args) {
- Status error(GetDebugger().DumpPropertyValue(
- &clean_ctx, out_file, arg.ref, OptionValue::eDumpGroupExport));
- if (!error.Success()) {
- result.AppendError(error.AsCString());
- result.SetStatus(eReturnStatusFailed);
- }
- }
-
- return result.Succeeded();
- }
-
-private:
- CommandOptions m_options;
-};
-
-// CommandObjectSettingsRead -- Read settings from file
-
-static constexpr OptionDefinition g_settings_read_options[] = {
-#define LLDB_OPTIONS_settings_read
-#include "CommandOptions.inc"
-};
-
-class CommandObjectSettingsRead : public CommandObjectParsed {
-public:
- CommandObjectSettingsRead(CommandInterpreter &interpreter)
- : CommandObjectParsed(
- interpreter, "settings read",
- "Read settings previously saved to a file with \"settings write\".",
- nullptr),
- m_options() {}
-
- ~CommandObjectSettingsRead() override = default;
-
- Options *GetOptions() override { return &m_options; }
-
- class CommandOptions : public Options {
- public:
- CommandOptions() : Options() {}
-
- ~CommandOptions() override = default;
-
- Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_arg,
- ExecutionContext *execution_context) override {
- Status error;
- const int short_option = m_getopt_table[option_idx].val;
-
- switch (short_option) {
- case 'f':
- m_filename.assign(option_arg);
- break;
- default:
- error.SetErrorStringWithFormat("unrecognized option '%c'",
- short_option);
- break;
- }
-
- return error;
- }
-
- void OptionParsingStarting(ExecutionContext *execution_context) override {
- m_filename.clear();
- }
-
- llvm::ArrayRef<OptionDefinition> GetDefinitions() override {
- return llvm::makeArrayRef(g_settings_read_options);
- }
-
- // Instance variables to hold the values for command options.
- std::string m_filename;
- };
-
-protected:
- bool DoExecute(Args &command, CommandReturnObject &result) override {
- FileSpec file(m_options.m_filename);
- FileSystem::Instance().Resolve(file);
- ExecutionContext clean_ctx;
- CommandInterpreterRunOptions options;
- options.SetAddToHistory(false);
- options.SetEchoCommands(false);
- options.SetPrintResults(true);
- options.SetPrintErrors(true);
- options.SetStopOnError(false);
- m_interpreter.HandleCommandsFromFile(file, &clean_ctx, options, result);
- return result.Succeeded();
- }
-
-private:
- CommandOptions m_options;
-};
-
-// CommandObjectSettingsList -- List settable variables
-
-class CommandObjectSettingsList : public CommandObjectParsed {
-public:
- CommandObjectSettingsList(CommandInterpreter &interpreter)
- : CommandObjectParsed(interpreter, "settings list",
- "List and describe matching debugger settings. "
- "Defaults to all listing all settings.",
- nullptr) {
- CommandArgumentEntry arg;
- CommandArgumentData var_name_arg;
- CommandArgumentData prefix_name_arg;
-
- // Define the first variant of this arg.
- var_name_arg.arg_type = eArgTypeSettingVariableName;
- var_name_arg.arg_repetition = eArgRepeatOptional;
-
- // Define the second variant of this arg.
- prefix_name_arg.arg_type = eArgTypeSettingPrefix;
- prefix_name_arg.arg_repetition = eArgRepeatOptional;
-
- arg.push_back(var_name_arg);
- arg.push_back(prefix_name_arg);
-
- // Push the data for the first argument into the m_arguments vector.
- m_arguments.push_back(arg);
- }
-
- ~CommandObjectSettingsList() override = default;
-
- int HandleArgumentCompletion(
- CompletionRequest &request,
- OptionElementVector &opt_element_vector) override {
- CommandCompletions::InvokeCommonCompletionCallbacks(
- GetCommandInterpreter(), CommandCompletions::eSettingsNameCompletion,
- request, nullptr);
- return request.GetNumberOfMatches();
- }
-
-protected:
- bool DoExecute(Args &args, CommandReturnObject &result) override {
- result.SetStatus(eReturnStatusSuccessFinishResult);
-
- const bool will_modify = false;
- const size_t argc = args.GetArgumentCount();
- if (argc > 0) {
- const bool dump_qualified_name = true;
-
- // TODO: Convert to StringRef based enumeration. Requires converting
- // GetPropertyAtPath first.
- for (size_t i = 0; i < argc; ++i) {
- const char *property_path = args.GetArgumentAtIndex(i);
-
- const Property *property =
- GetDebugger().GetValueProperties()->GetPropertyAtPath(
- &m_exe_ctx, will_modify, property_path);
-
- if (property) {
- property->DumpDescription(m_interpreter, result.GetOutputStream(), 0,
- dump_qualified_name);
- } else {
- result.AppendErrorWithFormat("invalid property path '%s'",
- property_path);
- result.SetStatus(eReturnStatusFailed);
- }
- }
- } else {
- GetDebugger().DumpAllDescriptions(m_interpreter,
- result.GetOutputStream());
- }
-
- return result.Succeeded();
- }
-};
-
-// CommandObjectSettingsRemove
-
-class CommandObjectSettingsRemove : public CommandObjectRaw {
-public:
- CommandObjectSettingsRemove(CommandInterpreter &interpreter)
- : CommandObjectRaw(interpreter, "settings remove",
- "Remove a value from a setting, specified by array "
- "index or dictionary key.") {
- CommandArgumentEntry arg1;
- CommandArgumentEntry arg2;
- CommandArgumentData var_name_arg;
- CommandArgumentData index_arg;
- CommandArgumentData key_arg;
-
- // Define the first (and only) variant of this arg.
- var_name_arg.arg_type = eArgTypeSettingVariableName;
- var_name_arg.arg_repetition = eArgRepeatPlain;
-
- // There is only one variant this argument could be; put it into the
- // argument entry.
- arg1.push_back(var_name_arg);
-
- // Define the first variant of this arg.
- index_arg.arg_type = eArgTypeSettingIndex;
- index_arg.arg_repetition = eArgRepeatPlain;
-
- // Define the second variant of this arg.
- key_arg.arg_type = eArgTypeSettingKey;
- key_arg.arg_repetition = eArgRepeatPlain;
-
- // Push both variants into this arg
- arg2.push_back(index_arg);
- arg2.push_back(key_arg);
-
- // Push the data for the first argument into the m_arguments vector.
- m_arguments.push_back(arg1);
- m_arguments.push_back(arg2);
- }
-
- ~CommandObjectSettingsRemove() override = default;
-
- int HandleArgumentCompletion(
- CompletionRequest &request,
- OptionElementVector &opt_element_vector) override {
- if (request.GetCursorIndex() < 2)
- CommandCompletions::InvokeCommonCompletionCallbacks(
- GetCommandInterpreter(), CommandCompletions::eSettingsNameCompletion,
- request, nullptr);
- return request.GetNumberOfMatches();
- }
-
-protected:
- bool DoExecute(llvm::StringRef command,
- CommandReturnObject &result) override {
- result.SetStatus(eReturnStatusSuccessFinishNoResult);
-
- Args cmd_args(command);
-
- // Process possible options.
- if (!ParseOptions(cmd_args, result))
- return false;
-
- const size_t argc = cmd_args.GetArgumentCount();
- if (argc == 0) {
- result.AppendError("'settings set' takes an array or dictionary item, or "
- "an array followed by one or more indexes, or a "
- "dictionary followed by one or more key names to "
- "remove");
- result.SetStatus(eReturnStatusFailed);
- return false;
- }
-
- const char *var_name = cmd_args.GetArgumentAtIndex(0);
- if ((var_name == nullptr) || (var_name[0] == '\0')) {
- result.AppendError(
- "'settings set' command requires a valid variable name");
- result.SetStatus(eReturnStatusFailed);
- return false;
- }
-
- // Split the raw command into var_name and value pair.
- llvm::StringRef raw_str(command);
- std::string var_value_string = raw_str.split(var_name).second.str();
- const char *var_value_cstr =
- Args::StripSpaces(var_value_string, true, true, false);
-
- Status error(GetDebugger().SetPropertyValue(
- &m_exe_ctx, eVarSetOperationRemove, var_name, var_value_cstr));
- if (error.Fail()) {
- result.AppendError(error.AsCString());
- result.SetStatus(eReturnStatusFailed);
- return false;
- }
-
- return result.Succeeded();
- }
-};
-
-// CommandObjectSettingsReplace
-
-class CommandObjectSettingsReplace : public CommandObjectRaw {
-public:
- CommandObjectSettingsReplace(CommandInterpreter &interpreter)
- : CommandObjectRaw(interpreter, "settings replace",
- "Replace the debugger setting value specified by "
- "array index or dictionary key.") {
- CommandArgumentEntry arg1;
- CommandArgumentEntry arg2;
- CommandArgumentEntry arg3;
- CommandArgumentData var_name_arg;
- CommandArgumentData index_arg;
- CommandArgumentData key_arg;
- CommandArgumentData value_arg;
-
- // Define the first (and only) variant of this arg.
- var_name_arg.arg_type = eArgTypeSettingVariableName;
- var_name_arg.arg_repetition = eArgRepeatPlain;
-
- // There is only one variant this argument could be; put it into the
- // argument entry.
- arg1.push_back(var_name_arg);
-
- // Define the first (variant of this arg.
- index_arg.arg_type = eArgTypeSettingIndex;
- index_arg.arg_repetition = eArgRepeatPlain;
-
- // Define the second (variant of this arg.
- key_arg.arg_type = eArgTypeSettingKey;
- key_arg.arg_repetition = eArgRepeatPlain;
-
- // Put both variants into this arg
- arg2.push_back(index_arg);
- arg2.push_back(key_arg);
-
- // Define the first (and only) variant of this arg.
- value_arg.arg_type = eArgTypeValue;
- value_arg.arg_repetition = eArgRepeatPlain;
-
- // There is only one variant this argument could be; put it into the
- // argument entry.
- arg3.push_back(value_arg);
-
- // Push the data for the first argument into the m_arguments vector.
- m_arguments.push_back(arg1);
- m_arguments.push_back(arg2);
- m_arguments.push_back(arg3);
- }
-
- ~CommandObjectSettingsReplace() override = default;
-
- // Overrides base class's behavior where WantsCompletion =
- // !WantsRawCommandString.
- bool WantsCompletion() override { return true; }
-
- int HandleArgumentCompletion(
- CompletionRequest &request,
- OptionElementVector &opt_element_vector) override {
- // Attempting to complete variable name
- if (request.GetCursorIndex() < 2)
- CommandCompletions::InvokeCommonCompletionCallbacks(
- GetCommandInterpreter(), CommandCompletions::eSettingsNameCompletion,
- request, nullptr);
-
- return request.GetNumberOfMatches();
- }
-
-protected:
- bool DoExecute(llvm::StringRef command,
- CommandReturnObject &result) override {
- result.SetStatus(eReturnStatusSuccessFinishNoResult);
-
- Args cmd_args(command);
- const char *var_name = cmd_args.GetArgumentAtIndex(0);
- if ((var_name == nullptr) || (var_name[0] == '\0')) {
- result.AppendError("'settings replace' command requires a valid variable "
- "name; No value supplied");
- result.SetStatus(eReturnStatusFailed);
- return false;
- }
-
- // Split the raw command into var_name, index_value, and value triple.
- llvm::StringRef raw_str(command);
- std::string var_value_string = raw_str.split(var_name).second.str();
- const char *var_value_cstr =
- Args::StripSpaces(var_value_string, true, true, false);
-
- Status error(GetDebugger().SetPropertyValue(
- &m_exe_ctx, eVarSetOperationReplace, var_name, var_value_cstr));
- if (error.Fail()) {
- result.AppendError(error.AsCString());
- result.SetStatus(eReturnStatusFailed);
- return false;
- } else {
- result.SetStatus(eReturnStatusSuccessFinishNoResult);
- }
-
- return result.Succeeded();
- }
-};
-
-// CommandObjectSettingsInsertBefore
-
-class CommandObjectSettingsInsertBefore : public CommandObjectRaw {
-public:
- CommandObjectSettingsInsertBefore(CommandInterpreter &interpreter)
- : CommandObjectRaw(interpreter, "settings insert-before",
- "Insert one or more values into an debugger array "
- "setting immediately before the specified element "
- "index.") {
- CommandArgumentEntry arg1;
- CommandArgumentEntry arg2;
- CommandArgumentEntry arg3;
- CommandArgumentData var_name_arg;
- CommandArgumentData index_arg;
- CommandArgumentData value_arg;
-
- // Define the first (and only) variant of this arg.
- var_name_arg.arg_type = eArgTypeSettingVariableName;
- var_name_arg.arg_repetition = eArgRepeatPlain;
-
- // There is only one variant this argument could be; put it into the
- // argument entry.
- arg1.push_back(var_name_arg);
-
- // Define the first (variant of this arg.
- index_arg.arg_type = eArgTypeSettingIndex;
- index_arg.arg_repetition = eArgRepeatPlain;
-
- // There is only one variant this argument could be; put it into the
- // argument entry.
- arg2.push_back(index_arg);
-
- // Define the first (and only) variant of this arg.
- value_arg.arg_type = eArgTypeValue;
- value_arg.arg_repetition = eArgRepeatPlain;
-
- // There is only one variant this argument could be; put it into the
- // argument entry.
- arg3.push_back(value_arg);
-
- // Push the data for the first argument into the m_arguments vector.
- m_arguments.push_back(arg1);
- m_arguments.push_back(arg2);
- m_arguments.push_back(arg3);
- }
-
- ~CommandObjectSettingsInsertBefore() override = default;
-
- // Overrides base class's behavior where WantsCompletion =
- // !WantsRawCommandString.
- bool WantsCompletion() override { return true; }
-
- int HandleArgumentCompletion(
- CompletionRequest &request,
- OptionElementVector &opt_element_vector) override {
- // Attempting to complete variable name
- if (request.GetCursorIndex() < 2)
- CommandCompletions::InvokeCommonCompletionCallbacks(
- GetCommandInterpreter(), CommandCompletions::eSettingsNameCompletion,
- request, nullptr);
-
- return request.GetNumberOfMatches();
- }
-
-protected:
- bool DoExecute(llvm::StringRef command,
- CommandReturnObject &result) override {
- result.SetStatus(eReturnStatusSuccessFinishNoResult);
-
- Args cmd_args(command);
- const size_t argc = cmd_args.GetArgumentCount();
-
- if (argc < 3) {
- result.AppendError("'settings insert-before' takes more arguments");
- result.SetStatus(eReturnStatusFailed);
- return false;
- }
-
- const char *var_name = cmd_args.GetArgumentAtIndex(0);
- if ((var_name == nullptr) || (var_name[0] == '\0')) {
- result.AppendError("'settings insert-before' command requires a valid "
- "variable name; No value supplied");
- result.SetStatus(eReturnStatusFailed);
- return false;
- }
-
- // Split the raw command into var_name, index_value, and value triple.
- llvm::StringRef raw_str(command);
- std::string var_value_string = raw_str.split(var_name).second.str();
- const char *var_value_cstr =
- Args::StripSpaces(var_value_string, true, true, false);
-
- Status error(GetDebugger().SetPropertyValue(
- &m_exe_ctx, eVarSetOperationInsertBefore, var_name, var_value_cstr));
- if (error.Fail()) {
- result.AppendError(error.AsCString());
- result.SetStatus(eReturnStatusFailed);
- return false;
- }
-
- return result.Succeeded();
- }
-};
-
-// CommandObjectSettingInsertAfter
-
-class CommandObjectSettingsInsertAfter : public CommandObjectRaw {
-public:
- CommandObjectSettingsInsertAfter(CommandInterpreter &interpreter)
- : CommandObjectRaw(interpreter, "settings insert-after",
- "Insert one or more values into a debugger array "
- "settings after the specified element index.") {
- CommandArgumentEntry arg1;
- CommandArgumentEntry arg2;
- CommandArgumentEntry arg3;
- CommandArgumentData var_name_arg;
- CommandArgumentData index_arg;
- CommandArgumentData value_arg;
-
- // Define the first (and only) variant of this arg.
- var_name_arg.arg_type = eArgTypeSettingVariableName;
- var_name_arg.arg_repetition = eArgRepeatPlain;
-
- // There is only one variant this argument could be; put it into the
- // argument entry.
- arg1.push_back(var_name_arg);
-
- // Define the first (variant of this arg.
- index_arg.arg_type = eArgTypeSettingIndex;
- index_arg.arg_repetition = eArgRepeatPlain;
-
- // There is only one variant this argument could be; put it into the
- // argument entry.
- arg2.push_back(index_arg);
-
- // Define the first (and only) variant of this arg.
- value_arg.arg_type = eArgTypeValue;
- value_arg.arg_repetition = eArgRepeatPlain;
-
- // There is only one variant this argument could be; put it into the
- // argument entry.
- arg3.push_back(value_arg);
-
- // Push the data for the first argument into the m_arguments vector.
- m_arguments.push_back(arg1);
- m_arguments.push_back(arg2);
- m_arguments.push_back(arg3);
- }
-
- ~CommandObjectSettingsInsertAfter() override = default;
-
- // Overrides base class's behavior where WantsCompletion =
- // !WantsRawCommandString.
- bool WantsCompletion() override { return true; }
-
- int HandleArgumentCompletion(
- CompletionRequest &request,
- OptionElementVector &opt_element_vector) override {
- // Attempting to complete variable name
- if (request.GetCursorIndex() < 2)
- CommandCompletions::InvokeCommonCompletionCallbacks(
- GetCommandInterpreter(), CommandCompletions::eSettingsNameCompletion,
- request, nullptr);
-
- return request.GetNumberOfMatches();
- }
-
-protected:
- bool DoExecute(llvm::StringRef command,
- CommandReturnObject &result) override {
- result.SetStatus(eReturnStatusSuccessFinishNoResult);
-
- Args cmd_args(command);
- const size_t argc = cmd_args.GetArgumentCount();
-
- if (argc < 3) {
- result.AppendError("'settings insert-after' takes more arguments");
- result.SetStatus(eReturnStatusFailed);
- return false;
- }
-
- const char *var_name = cmd_args.GetArgumentAtIndex(0);
- if ((var_name == nullptr) || (var_name[0] == '\0')) {
- result.AppendError("'settings insert-after' command requires a valid "
- "variable name; No value supplied");
- result.SetStatus(eReturnStatusFailed);
- return false;
- }
-
- // Split the raw command into var_name, index_value, and value triple.
- llvm::StringRef raw_str(command);
- std::string var_value_string = raw_str.split(var_name).second.str();
- const char *var_value_cstr =
- Args::StripSpaces(var_value_string, true, true, false);
-
- Status error(GetDebugger().SetPropertyValue(
- &m_exe_ctx, eVarSetOperationInsertAfter, var_name, var_value_cstr));
- if (error.Fail()) {
- result.AppendError(error.AsCString());
- result.SetStatus(eReturnStatusFailed);
- return false;
- }
-
- return result.Succeeded();
- }
-};
-
-// CommandObjectSettingsAppend
-
-class CommandObjectSettingsAppend : public CommandObjectRaw {
-public:
- CommandObjectSettingsAppend(CommandInterpreter &interpreter)
- : CommandObjectRaw(interpreter, "settings append",
- "Append one or more values to a debugger array, "
- "dictionary, or string setting.") {
- CommandArgumentEntry arg1;
- CommandArgumentEntry arg2;
- CommandArgumentData var_name_arg;
- CommandArgumentData value_arg;
-
- // Define the first (and only) variant of this arg.
- var_name_arg.arg_type = eArgTypeSettingVariableName;
- var_name_arg.arg_repetition = eArgRepeatPlain;
-
- // There is only one variant this argument could be; put it into the
- // argument entry.
- arg1.push_back(var_name_arg);
-
- // Define the first (and only) variant of this arg.
- value_arg.arg_type = eArgTypeValue;
- value_arg.arg_repetition = eArgRepeatPlain;
-
- // There is only one variant this argument could be; put it into the
- // argument entry.
- arg2.push_back(value_arg);
-
- // Push the data for the first argument into the m_arguments vector.
- m_arguments.push_back(arg1);
- m_arguments.push_back(arg2);
- }
-
- ~CommandObjectSettingsAppend() override = default;
-
- // Overrides base class's behavior where WantsCompletion =
- // !WantsRawCommandString.
- bool WantsCompletion() override { return true; }
-
- int HandleArgumentCompletion(
- CompletionRequest &request,
- OptionElementVector &opt_element_vector) override {
- // Attempting to complete variable name
- if (request.GetCursorIndex() < 2)
- CommandCompletions::InvokeCommonCompletionCallbacks(
- GetCommandInterpreter(), CommandCompletions::eSettingsNameCompletion,
- request, nullptr);
-
- return request.GetNumberOfMatches();
- }
-
-protected:
- bool DoExecute(llvm::StringRef command,
- CommandReturnObject &result) override {
- result.SetStatus(eReturnStatusSuccessFinishNoResult);
- Args cmd_args(command);
- const size_t argc = cmd_args.GetArgumentCount();
-
- if (argc < 2) {
- result.AppendError("'settings append' takes more arguments");
- result.SetStatus(eReturnStatusFailed);
- return false;
- }
-
- const char *var_name = cmd_args.GetArgumentAtIndex(0);
- if ((var_name == nullptr) || (var_name[0] == '\0')) {
- result.AppendError("'settings append' command requires a valid variable "
- "name; No value supplied");
- result.SetStatus(eReturnStatusFailed);
- return false;
- }
-
- // Do not perform cmd_args.Shift() since StringRef is manipulating the raw
- // character string later on.
-
- // Split the raw command into var_name and value pair.
- llvm::StringRef raw_str(command);
- std::string var_value_string = raw_str.split(var_name).second.str();
- const char *var_value_cstr =
- Args::StripSpaces(var_value_string, true, true, false);
-
- Status error(GetDebugger().SetPropertyValue(
- &m_exe_ctx, eVarSetOperationAppend, var_name, var_value_cstr));
- if (error.Fail()) {
- result.AppendError(error.AsCString());
- result.SetStatus(eReturnStatusFailed);
- return false;
- }
-
- return result.Succeeded();
- }
-};
-
-// CommandObjectSettingsClear
-
-class CommandObjectSettingsClear : public CommandObjectParsed {
-public:
- CommandObjectSettingsClear(CommandInterpreter &interpreter)
- : CommandObjectParsed(
- interpreter, "settings clear",
- "Clear a debugger setting array, dictionary, or string.", nullptr) {
- CommandArgumentEntry arg;
- CommandArgumentData var_name_arg;
-
- // Define the first (and only) variant of this arg.
- var_name_arg.arg_type = eArgTypeSettingVariableName;
- var_name_arg.arg_repetition = eArgRepeatPlain;
-
- // There is only one variant this argument could be; put it into the
- // argument entry.
- arg.push_back(var_name_arg);
-
- // Push the data for the first argument into the m_arguments vector.
- m_arguments.push_back(arg);
- }
-
- ~CommandObjectSettingsClear() override = default;
-
- int HandleArgumentCompletion(
- CompletionRequest &request,
- OptionElementVector &opt_element_vector) override {
- // Attempting to complete variable name
- if (request.GetCursorIndex() < 2)
- CommandCompletions::InvokeCommonCompletionCallbacks(
- GetCommandInterpreter(), CommandCompletions::eSettingsNameCompletion,
- request, nullptr);
-
- return request.GetNumberOfMatches();
- }
-
-protected:
- bool DoExecute(Args &command, CommandReturnObject &result) override {
- result.SetStatus(eReturnStatusSuccessFinishNoResult);
- const size_t argc = command.GetArgumentCount();
-
- if (argc != 1) {
- result.AppendError("'settings clear' takes exactly one argument");
- result.SetStatus(eReturnStatusFailed);
- return false;
- }
-
- const char *var_name = command.GetArgumentAtIndex(0);
- if ((var_name == nullptr) || (var_name[0] == '\0')) {
- result.AppendError("'settings clear' command requires a valid variable "
- "name; No value supplied");
- result.SetStatus(eReturnStatusFailed);
- return false;
- }
-
- Status error(GetDebugger().SetPropertyValue(
- &m_exe_ctx, eVarSetOperationClear, var_name, llvm::StringRef()));
- if (error.Fail()) {
- result.AppendError(error.AsCString());
- result.SetStatus(eReturnStatusFailed);
- return false;
- }
-
- return result.Succeeded();
- }
-};
-
-// CommandObjectMultiwordSettings
-
-CommandObjectMultiwordSettings::CommandObjectMultiwordSettings(
- CommandInterpreter &interpreter)
- : CommandObjectMultiword(interpreter, "settings",
- "Commands for managing LLDB settings.",
- "settings <subcommand> [<command-options>]") {
- LoadSubCommand("set",
- CommandObjectSP(new CommandObjectSettingsSet(interpreter)));
- LoadSubCommand("show",
- CommandObjectSP(new CommandObjectSettingsShow(interpreter)));
- LoadSubCommand("list",
- CommandObjectSP(new CommandObjectSettingsList(interpreter)));
- LoadSubCommand("remove",
- CommandObjectSP(new CommandObjectSettingsRemove(interpreter)));
- LoadSubCommand("replace", CommandObjectSP(
- new CommandObjectSettingsReplace(interpreter)));
- LoadSubCommand(
- "insert-before",
- CommandObjectSP(new CommandObjectSettingsInsertBefore(interpreter)));
- LoadSubCommand(
- "insert-after",
- CommandObjectSP(new CommandObjectSettingsInsertAfter(interpreter)));
- LoadSubCommand("append",
- CommandObjectSP(new CommandObjectSettingsAppend(interpreter)));
- LoadSubCommand("clear",
- CommandObjectSP(new CommandObjectSettingsClear(interpreter)));
- LoadSubCommand("write",
- CommandObjectSP(new CommandObjectSettingsWrite(interpreter)));
- LoadSubCommand("read",
- CommandObjectSP(new CommandObjectSettingsRead(interpreter)));
-}
-
-CommandObjectMultiwordSettings::~CommandObjectMultiwordSettings() = default;