xref: /openbsd-src/gnu/llvm/lldb/source/Interpreter/OptionValueArch.cpp (revision 061da546b983eb767bad15e67af1174fb0bcf31c)
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