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