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