OptionValueArch.cpp revision 360784
1//===-- OptionValueArch.cpp ---------------------------------*- C++ -*-===//
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-exception
6//
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/Utility/Args.h"
15#include "lldb/Utility/State.h"
16
17using namespace lldb;
18using namespace lldb_private;
19
20void OptionValueArch::DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
21                                uint32_t dump_mask) {
22  if (dump_mask & eDumpOptionType)
23    strm.Printf("(%s)", GetTypeAsCString());
24  if (dump_mask & eDumpOptionValue) {
25    if (dump_mask & eDumpOptionType)
26      strm.PutCString(" = ");
27
28    if (m_current_value.IsValid()) {
29      const char *arch_name = m_current_value.GetArchitectureName();
30      if (arch_name)
31        strm.PutCString(arch_name);
32    }
33  }
34}
35
36Status OptionValueArch::SetValueFromString(llvm::StringRef value,
37                                           VarSetOperationType op) {
38  Status error;
39  switch (op) {
40  case eVarSetOperationClear:
41    Clear();
42    NotifyValueChanged();
43    break;
44
45  case eVarSetOperationReplace:
46  case eVarSetOperationAssign: {
47    std::string value_str = value.trim().str();
48    if (m_current_value.SetTriple(value_str.c_str())) {
49      m_value_was_set = true;
50      NotifyValueChanged();
51    } else
52      error.SetErrorStringWithFormat("unsupported architecture '%s'",
53                                     value_str.c_str());
54    break;
55  }
56  case eVarSetOperationInsertBefore:
57  case eVarSetOperationInsertAfter:
58  case eVarSetOperationRemove:
59  case eVarSetOperationAppend:
60  case eVarSetOperationInvalid:
61    error = OptionValue::SetValueFromString(value, op);
62    break;
63  }
64  return error;
65}
66
67lldb::OptionValueSP OptionValueArch::DeepCopy() const {
68  return OptionValueSP(new OptionValueArch(*this));
69}
70
71void OptionValueArch::AutoComplete(CommandInterpreter &interpreter,
72                                   CompletionRequest &request) {
73  CommandCompletions::InvokeCommonCompletionCallbacks(
74      interpreter, CommandCompletions::eArchitectureCompletion, request,
75      nullptr);
76}
77