
Adds a `--defaults`/`-d` flag to `settings show`. This mode will _optionally_ show a setting's default value. In other words, this does not always print a default value for every setting. A default value is not shown when the current value _is_ the default. Note: some setting types do not print empty or invalid values. For these setting types, if the default value is empty or invalid, the same elision logic is applied to printing the default value.
87 lines
2.8 KiB
C++
87 lines
2.8 KiB
C++
//===-- OptionValueArch.cpp -----------------------------------------------===//
|
|
//
|
|
// 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 "lldb/Interpreter/OptionValueArch.h"
|
|
|
|
#include "lldb/DataFormatters/FormatManager.h"
|
|
#include "lldb/Interpreter/CommandCompletions.h"
|
|
#include "lldb/Interpreter/CommandInterpreter.h"
|
|
#include "lldb/Interpreter/OptionValue.h"
|
|
#include "lldb/Utility/Args.h"
|
|
#include "lldb/Utility/State.h"
|
|
|
|
using namespace lldb;
|
|
using namespace lldb_private;
|
|
|
|
void OptionValueArch::DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
|
|
uint32_t dump_mask) {
|
|
if (dump_mask & eDumpOptionType)
|
|
strm.Printf("(%s)", GetTypeAsCString());
|
|
if (dump_mask & eDumpOptionValue) {
|
|
if (dump_mask & eDumpOptionType)
|
|
strm.PutCString(" = ");
|
|
|
|
if (m_current_value.IsValid()) {
|
|
const char *arch_name = m_current_value.GetArchitectureName();
|
|
if (arch_name)
|
|
strm.PutCString(arch_name);
|
|
}
|
|
|
|
if (dump_mask & eDumpOptionDefaultValue &&
|
|
m_current_value != m_default_value && m_default_value.IsValid()) {
|
|
DefaultValueFormat label(strm);
|
|
strm.PutCString(m_default_value.GetArchitectureName());
|
|
}
|
|
}
|
|
}
|
|
|
|
llvm::json::Value
|
|
OptionValueArch::ToJSON(const ExecutionContext *exe_ctx) const {
|
|
if (m_current_value.IsValid())
|
|
return llvm::json::Value(m_current_value.GetArchitectureName());
|
|
|
|
return {};
|
|
}
|
|
|
|
Status OptionValueArch::SetValueFromString(llvm::StringRef value,
|
|
VarSetOperationType op) {
|
|
Status error;
|
|
switch (op) {
|
|
case eVarSetOperationClear:
|
|
Clear();
|
|
NotifyValueChanged();
|
|
break;
|
|
|
|
case eVarSetOperationReplace:
|
|
case eVarSetOperationAssign: {
|
|
std::string value_str = value.trim().str();
|
|
if (m_current_value.SetTriple(value_str.c_str())) {
|
|
m_value_was_set = true;
|
|
NotifyValueChanged();
|
|
} else
|
|
error = Status::FromErrorStringWithFormat("unsupported architecture '%s'",
|
|
value_str.c_str());
|
|
break;
|
|
}
|
|
case eVarSetOperationInsertBefore:
|
|
case eVarSetOperationInsertAfter:
|
|
case eVarSetOperationRemove:
|
|
case eVarSetOperationAppend:
|
|
case eVarSetOperationInvalid:
|
|
error = OptionValue::SetValueFromString(value, op);
|
|
break;
|
|
}
|
|
return error;
|
|
}
|
|
|
|
void OptionValueArch::AutoComplete(CommandInterpreter &interpreter,
|
|
CompletionRequest &request) {
|
|
lldb_private::CommandCompletions::InvokeCommonCompletionCallbacks(
|
|
interpreter, lldb::eArchitectureCompletion, request, nullptr);
|
|
}
|