87 lines · cpp
1//===-- OptionValueArch.cpp -----------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "lldb/Interpreter/OptionValueArch.h"10 11#include "lldb/DataFormatters/FormatManager.h"12#include "lldb/Interpreter/CommandCompletions.h"13#include "lldb/Interpreter/CommandInterpreter.h"14#include "lldb/Interpreter/OptionValue.h"15#include "lldb/Utility/Args.h"16#include "lldb/Utility/State.h"17 18using namespace lldb;19using namespace lldb_private;20 21void OptionValueArch::DumpValue(const ExecutionContext *exe_ctx, Stream &strm,22 uint32_t dump_mask) {23 if (dump_mask & eDumpOptionType)24 strm.Printf("(%s)", GetTypeAsCString());25 if (dump_mask & eDumpOptionValue) {26 if (dump_mask & eDumpOptionType)27 strm.PutCString(" = ");28 29 if (m_current_value.IsValid()) {30 const char *arch_name = m_current_value.GetArchitectureName();31 if (arch_name)32 strm.PutCString(arch_name);33 }34 35 if (dump_mask & eDumpOptionDefaultValue &&36 m_current_value != m_default_value && m_default_value.IsValid()) {37 DefaultValueFormat label(strm);38 strm.PutCString(m_default_value.GetArchitectureName());39 }40 }41}42 43llvm::json::Value44OptionValueArch::ToJSON(const ExecutionContext *exe_ctx) const {45 if (m_current_value.IsValid())46 return llvm::json::Value(m_current_value.GetArchitectureName());47 48 return {};49}50 51Status OptionValueArch::SetValueFromString(llvm::StringRef value,52 VarSetOperationType op) {53 Status error;54 switch (op) {55 case eVarSetOperationClear:56 Clear();57 NotifyValueChanged();58 break;59 60 case eVarSetOperationReplace:61 case eVarSetOperationAssign: {62 std::string value_str = value.trim().str();63 if (m_current_value.SetTriple(value_str.c_str())) {64 m_value_was_set = true;65 NotifyValueChanged();66 } else67 error = Status::FromErrorStringWithFormat("unsupported architecture '%s'",68 value_str.c_str());69 break;70 }71 case eVarSetOperationInsertBefore:72 case eVarSetOperationInsertAfter:73 case eVarSetOperationRemove:74 case eVarSetOperationAppend:75 case eVarSetOperationInvalid:76 error = OptionValue::SetValueFromString(value, op);77 break;78 }79 return error;80}81 82void OptionValueArch::AutoComplete(CommandInterpreter &interpreter,83 CompletionRequest &request) {84 lldb_private::CommandCompletions::InvokeCommonCompletionCallbacks(85 interpreter, lldb::eArchitectureCompletion, request, nullptr);86}87