OptionValueArch.cpp revision 344779
1254721Semaste//===-- OptionValueArch.cpp ---------------------------------*- C++ -*-===//
2254721Semaste//
3254721Semaste//                     The LLVM Compiler Infrastructure
4254721Semaste//
5254721Semaste// This file is distributed under the University of Illinois Open Source
6254721Semaste// License. See LICENSE.TXT for details.
7254721Semaste//
8254721Semaste//===----------------------------------------------------------------------===//
9254721Semaste
10254721Semaste#include "lldb/Interpreter/OptionValueArch.h"
11254721Semaste
12254721Semaste#include "lldb/DataFormatters/FormatManager.h"
13254721Semaste#include "lldb/Interpreter/CommandCompletions.h"
14314564Sdim#include "lldb/Interpreter/CommandInterpreter.h"
15341825Sdim#include "lldb/Utility/Args.h"
16344779Sdim#include "lldb/Utility/State.h"
17254721Semaste
18254721Semasteusing namespace lldb;
19254721Semasteusing namespace lldb_private;
20254721Semaste
21314564Sdimvoid OptionValueArch::DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
22314564Sdim                                uint32_t dump_mask) {
23314564Sdim  if (dump_mask & eDumpOptionType)
24314564Sdim    strm.Printf("(%s)", GetTypeAsCString());
25314564Sdim  if (dump_mask & eDumpOptionValue) {
26254721Semaste    if (dump_mask & eDumpOptionType)
27314564Sdim      strm.PutCString(" = ");
28254721Semaste
29314564Sdim    if (m_current_value.IsValid()) {
30314564Sdim      const char *arch_name = m_current_value.GetArchitectureName();
31314564Sdim      if (arch_name)
32314564Sdim        strm.PutCString(arch_name);
33254721Semaste    }
34314564Sdim  }
35254721Semaste}
36254721Semaste
37321369SdimStatus OptionValueArch::SetValueFromString(llvm::StringRef value,
38321369Sdim                                           VarSetOperationType op) {
39321369Sdim  Status error;
40314564Sdim  switch (op) {
41314564Sdim  case eVarSetOperationClear:
42314564Sdim    Clear();
43314564Sdim    NotifyValueChanged();
44314564Sdim    break;
45314564Sdim
46314564Sdim  case eVarSetOperationReplace:
47314564Sdim  case eVarSetOperationAssign: {
48314564Sdim    std::string value_str = value.trim().str();
49314564Sdim    if (m_current_value.SetTriple(value_str.c_str())) {
50314564Sdim      m_value_was_set = true;
51314564Sdim      NotifyValueChanged();
52314564Sdim    } else
53314564Sdim      error.SetErrorStringWithFormat("unsupported architecture '%s'",
54314564Sdim                                     value_str.c_str());
55314564Sdim    break;
56314564Sdim  }
57314564Sdim  case eVarSetOperationInsertBefore:
58314564Sdim  case eVarSetOperationInsertAfter:
59314564Sdim  case eVarSetOperationRemove:
60314564Sdim  case eVarSetOperationAppend:
61314564Sdim  case eVarSetOperationInvalid:
62314564Sdim    error = OptionValue::SetValueFromString(value, op);
63314564Sdim    break;
64314564Sdim  }
65314564Sdim  return error;
66254721Semaste}
67254721Semaste
68314564Sdimlldb::OptionValueSP OptionValueArch::DeepCopy() const {
69314564Sdim  return OptionValueSP(new OptionValueArch(*this));
70254721Semaste}
71254721Semaste
72314564Sdimsize_t OptionValueArch::AutoComplete(CommandInterpreter &interpreter,
73341825Sdim                                     CompletionRequest &request) {
74341825Sdim  request.SetWordComplete(false);
75314564Sdim  CommandCompletions::InvokeCommonCompletionCallbacks(
76341825Sdim      interpreter, CommandCompletions::eArchitectureCompletion, request,
77341825Sdim      nullptr);
78341825Sdim  return request.GetNumberOfMatches();
79254721Semaste}
80