1254721Semaste//===-- OptionValueArch.cpp ---------------------------------*- C++ -*-===//
2254721Semaste//
3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4353358Sdim// See https://llvm.org/LICENSE.txt for license information.
5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6254721Semaste//
7254721Semaste//===----------------------------------------------------------------------===//
8254721Semaste
9254721Semaste#include "lldb/Interpreter/OptionValueArch.h"
10254721Semaste
11254721Semaste#include "lldb/DataFormatters/FormatManager.h"
12254721Semaste#include "lldb/Interpreter/CommandCompletions.h"
13314564Sdim#include "lldb/Interpreter/CommandInterpreter.h"
14341825Sdim#include "lldb/Utility/Args.h"
15344779Sdim#include "lldb/Utility/State.h"
16254721Semaste
17254721Semasteusing namespace lldb;
18254721Semasteusing namespace lldb_private;
19254721Semaste
20314564Sdimvoid OptionValueArch::DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
21314564Sdim                                uint32_t dump_mask) {
22314564Sdim  if (dump_mask & eDumpOptionType)
23314564Sdim    strm.Printf("(%s)", GetTypeAsCString());
24314564Sdim  if (dump_mask & eDumpOptionValue) {
25254721Semaste    if (dump_mask & eDumpOptionType)
26314564Sdim      strm.PutCString(" = ");
27254721Semaste
28314564Sdim    if (m_current_value.IsValid()) {
29314564Sdim      const char *arch_name = m_current_value.GetArchitectureName();
30314564Sdim      if (arch_name)
31314564Sdim        strm.PutCString(arch_name);
32254721Semaste    }
33314564Sdim  }
34254721Semaste}
35254721Semaste
36321369SdimStatus OptionValueArch::SetValueFromString(llvm::StringRef value,
37321369Sdim                                           VarSetOperationType op) {
38321369Sdim  Status error;
39314564Sdim  switch (op) {
40314564Sdim  case eVarSetOperationClear:
41314564Sdim    Clear();
42314564Sdim    NotifyValueChanged();
43314564Sdim    break;
44314564Sdim
45314564Sdim  case eVarSetOperationReplace:
46314564Sdim  case eVarSetOperationAssign: {
47314564Sdim    std::string value_str = value.trim().str();
48314564Sdim    if (m_current_value.SetTriple(value_str.c_str())) {
49314564Sdim      m_value_was_set = true;
50314564Sdim      NotifyValueChanged();
51314564Sdim    } else
52314564Sdim      error.SetErrorStringWithFormat("unsupported architecture '%s'",
53314564Sdim                                     value_str.c_str());
54314564Sdim    break;
55314564Sdim  }
56314564Sdim  case eVarSetOperationInsertBefore:
57314564Sdim  case eVarSetOperationInsertAfter:
58314564Sdim  case eVarSetOperationRemove:
59314564Sdim  case eVarSetOperationAppend:
60314564Sdim  case eVarSetOperationInvalid:
61314564Sdim    error = OptionValue::SetValueFromString(value, op);
62314564Sdim    break;
63314564Sdim  }
64314564Sdim  return error;
65254721Semaste}
66254721Semaste
67314564Sdimlldb::OptionValueSP OptionValueArch::DeepCopy() const {
68314564Sdim  return OptionValueSP(new OptionValueArch(*this));
69254721Semaste}
70254721Semaste
71360784Sdimvoid OptionValueArch::AutoComplete(CommandInterpreter &interpreter,
72360784Sdim                                   CompletionRequest &request) {
73314564Sdim  CommandCompletions::InvokeCommonCompletionCallbacks(
74341825Sdim      interpreter, CommandCompletions::eArchitectureCompletion, request,
75341825Sdim      nullptr);
76254721Semaste}
77