blob: 3d08780ae6f69491a71384dfa3b5bcf65bcf0d14 [file] [log] [blame]
Greg Clayton67cc0632012-08-22 17:17:09 +00001//===-- 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
Greg Clayton67cc0632012-08-22 17:17:09 +000010#include "lldb/Interpreter/OptionValueArch.h"
11
12// C Includes
13// C++ Includes
14// Other libraries and framework includes
15// Project includes
Greg Clayton67cc0632012-08-22 17:17:09 +000016#include "lldb/Core/State.h"
Enrico Granata5548cb52013-01-28 23:47:25 +000017#include "lldb/DataFormatters/FormatManager.h"
Greg Clayton67cc0632012-08-22 17:17:09 +000018#include "lldb/Interpreter/CommandCompletions.h"
Todd Fialae1cfbc72016-08-11 23:51:28 +000019#include "lldb/Interpreter/CommandInterpreter.h"
Pavel Labath145d95c2018-04-17 18:53:35 +000020#include "lldb/Utility/Args.h"
Greg Clayton67cc0632012-08-22 17:17:09 +000021
22using namespace lldb;
23using namespace lldb_private;
24
Kate Stoneb9c1b512016-09-06 20:57:50 +000025void OptionValueArch::DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
26 uint32_t dump_mask) {
27 if (dump_mask & eDumpOptionType)
28 strm.Printf("(%s)", GetTypeAsCString());
29 if (dump_mask & eDumpOptionValue) {
Greg Clayton67cc0632012-08-22 17:17:09 +000030 if (dump_mask & eDumpOptionType)
Kate Stoneb9c1b512016-09-06 20:57:50 +000031 strm.PutCString(" = ");
Greg Clayton67cc0632012-08-22 17:17:09 +000032
Kate Stoneb9c1b512016-09-06 20:57:50 +000033 if (m_current_value.IsValid()) {
34 const char *arch_name = m_current_value.GetArchitectureName();
35 if (arch_name)
36 strm.PutCString(arch_name);
Greg Clayton67cc0632012-08-22 17:17:09 +000037 }
Kate Stoneb9c1b512016-09-06 20:57:50 +000038 }
Greg Clayton67cc0632012-08-22 17:17:09 +000039}
40
Zachary Turner97206d52017-05-12 04:51:55 +000041Status OptionValueArch::SetValueFromString(llvm::StringRef value,
42 VarSetOperationType op) {
43 Status error;
Kate Stoneb9c1b512016-09-06 20:57:50 +000044 switch (op) {
45 case eVarSetOperationClear:
46 Clear();
47 NotifyValueChanged();
48 break;
49
50 case eVarSetOperationReplace:
51 case eVarSetOperationAssign: {
52 std::string value_str = value.trim().str();
53 if (m_current_value.SetTriple(value_str.c_str())) {
54 m_value_was_set = true;
55 NotifyValueChanged();
56 } else
57 error.SetErrorStringWithFormat("unsupported architecture '%s'",
58 value_str.c_str());
59 break;
60 }
61 case eVarSetOperationInsertBefore:
62 case eVarSetOperationInsertAfter:
63 case eVarSetOperationRemove:
64 case eVarSetOperationAppend:
65 case eVarSetOperationInvalid:
66 error = OptionValue::SetValueFromString(value, op);
67 break;
68 }
69 return error;
Greg Clayton67cc0632012-08-22 17:17:09 +000070}
71
Kate Stoneb9c1b512016-09-06 20:57:50 +000072lldb::OptionValueSP OptionValueArch::DeepCopy() const {
73 return OptionValueSP(new OptionValueArch(*this));
Greg Clayton67cc0632012-08-22 17:17:09 +000074}
75
Kate Stoneb9c1b512016-09-06 20:57:50 +000076size_t OptionValueArch::AutoComplete(CommandInterpreter &interpreter,
Raphael Isemanna2e76c02018-07-13 18:28:14 +000077 CompletionRequest &request) {
78 request.SetWordComplete(false);
79 request.GetMatches().Clear();
Kate Stoneb9c1b512016-09-06 20:57:50 +000080 CommandCompletions::InvokeCommonCompletionCallbacks(
Raphael Isemanna2e76c02018-07-13 18:28:14 +000081 interpreter, CommandCompletions::eArchitectureCompletion, request,
82 nullptr);
83 return request.GetMatches().GetSize();
Greg Clayton67cc0632012-08-22 17:17:09 +000084}