blob: 3519334b8a0f72a0a16d7a1f4cbc59c69b3b4bf4 [file] [log] [blame]
Greg Clayton67cc0632012-08-22 17:17:09 +00001//===-- OptionValueUUID.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/OptionValueUUID.h"
11
12// C Includes
13// C++ Includes
14// Other libraries and framework includes
15// Project includes
Greg Claytonb5f0fea2012-09-27 22:26:11 +000016#include "lldb/Core/Module.h"
Greg Clayton67cc0632012-08-22 17:17:09 +000017#include "lldb/Core/Stream.h"
Greg Claytonb5f0fea2012-09-27 22:26:11 +000018#include "lldb/Core/StringList.h"
19#include "lldb/Interpreter/CommandInterpreter.h"
Greg Clayton67cc0632012-08-22 17:17:09 +000020
21using namespace lldb;
22using namespace lldb_private;
23
Kate Stoneb9c1b512016-09-06 20:57:50 +000024void OptionValueUUID::DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
25 uint32_t dump_mask) {
26 if (dump_mask & eDumpOptionType)
27 strm.Printf("(%s)", GetTypeAsCString());
28 if (dump_mask & eDumpOptionValue) {
Greg Clayton67cc0632012-08-22 17:17:09 +000029 if (dump_mask & eDumpOptionType)
Kate Stoneb9c1b512016-09-06 20:57:50 +000030 strm.PutCString(" = ");
31 m_uuid.Dump(&strm);
32 }
33}
34
35Error OptionValueUUID::SetValueFromString(llvm::StringRef value,
36 VarSetOperationType op) {
37 Error error;
38 switch (op) {
39 case eVarSetOperationClear:
40 Clear();
41 NotifyValueChanged();
42 break;
43
44 case eVarSetOperationReplace:
45 case eVarSetOperationAssign: {
46 if (m_uuid.SetFromCString(value.str().c_str()) == 0)
47 error.SetErrorStringWithFormat("invalid uuid string value '%s'",
48 value.str().c_str());
49 else {
50 m_value_was_set = true;
51 NotifyValueChanged();
Greg Clayton67cc0632012-08-22 17:17:09 +000052 }
Kate Stoneb9c1b512016-09-06 20:57:50 +000053 } break;
54
55 case eVarSetOperationInsertBefore:
56 case eVarSetOperationInsertAfter:
57 case eVarSetOperationRemove:
58 case eVarSetOperationAppend:
59 case eVarSetOperationInvalid:
60 error = OptionValue::SetValueFromString(value, op);
61 break;
62 }
63 return error;
Greg Clayton67cc0632012-08-22 17:17:09 +000064}
65
Kate Stoneb9c1b512016-09-06 20:57:50 +000066lldb::OptionValueSP OptionValueUUID::DeepCopy() const {
67 return OptionValueSP(new OptionValueUUID(*this));
68}
69
70size_t OptionValueUUID::AutoComplete(CommandInterpreter &interpreter,
Zachary Turner4aa87532016-11-17 01:37:42 +000071 llvm::StringRef s, int match_start_point,
Kate Stoneb9c1b512016-09-06 20:57:50 +000072 int max_return_elements,
73 bool &word_complete, StringList &matches) {
74 word_complete = false;
75 matches.Clear();
76 ExecutionContext exe_ctx(interpreter.GetExecutionContext());
77 Target *target = exe_ctx.GetTargetPtr();
78 if (target) {
79 const size_t num_modules = target->GetImages().GetSize();
80 if (num_modules > 0) {
81 UUID::ValueType uuid_bytes;
Zachary Turner0eb31a12016-11-17 05:14:32 +000082 uint32_t num_bytes_decoded = 0;
83 UUID::DecodeUUIDBytesFromString(s, uuid_bytes, num_bytes_decoded);
Kate Stoneb9c1b512016-09-06 20:57:50 +000084 for (size_t i = 0; i < num_modules; ++i) {
85 ModuleSP module_sp(target->GetImages().GetModuleAtIndex(i));
86 if (module_sp) {
87 const UUID &module_uuid = module_sp->GetUUID();
88 if (module_uuid.IsValid()) {
89 bool add_uuid = false;
90 if (num_bytes_decoded == 0)
91 add_uuid = true;
92 else
93 add_uuid = ::memcmp(module_uuid.GetBytes(), uuid_bytes,
94 num_bytes_decoded) == 0;
95 if (add_uuid) {
96 std::string uuid_str;
97 uuid_str = module_uuid.GetAsString();
98 if (!uuid_str.empty())
99 matches.AppendString(uuid_str.c_str());
Greg Clayton67cc0632012-08-22 17:17:09 +0000100 }
Kate Stoneb9c1b512016-09-06 20:57:50 +0000101 }
Greg Claytonb5f0fea2012-09-27 22:26:11 +0000102 }
Kate Stoneb9c1b512016-09-06 20:57:50 +0000103 }
Greg Claytonb5f0fea2012-09-27 22:26:11 +0000104 }
Kate Stoneb9c1b512016-09-06 20:57:50 +0000105 }
106 return matches.GetSize();
Greg Claytonb5f0fea2012-09-27 22:26:11 +0000107}