blob: b9405842c5c6919c419317e3a822aef8cea984c6 [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 Claytonb5f0fea2012-09-27 22:26:11 +000017#include "lldb/Interpreter/CommandInterpreter.h"
Zachary Turnerbf9a7732017-02-02 21:39:50 +000018#include "lldb/Utility/Stream.h"
Zachary Turner573ab902017-03-21 18:25:04 +000019#include "lldb/Utility/StringList.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
Zachary Turner97206d52017-05-12 04:51:55 +000035Status OptionValueUUID::SetValueFromString(llvm::StringRef value,
36 VarSetOperationType op) {
37 Status error;
Kate Stoneb9c1b512016-09-06 20:57:50 +000038 switch (op) {
39 case eVarSetOperationClear:
40 Clear();
41 NotifyValueChanged();
42 break;
43
44 case eVarSetOperationReplace:
45 case eVarSetOperationAssign: {
Pavel Labatha174bcb2018-06-21 15:24:39 +000046 if (m_uuid.SetFromStringRef(value) == 0)
Kate Stoneb9c1b512016-09-06 20:57:50 +000047 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) {
Pavel Labath77c397f2018-06-29 11:20:29 +000079 llvm::SmallVector<uint8_t, 20> uuid_bytes;
80 if (UUID::DecodeUUIDBytesFromString(s, uuid_bytes).empty()) {
81 const size_t num_modules = target->GetImages().GetSize();
Kate Stoneb9c1b512016-09-06 20:57:50 +000082 for (size_t i = 0; i < num_modules; ++i) {
83 ModuleSP module_sp(target->GetImages().GetModuleAtIndex(i));
84 if (module_sp) {
85 const UUID &module_uuid = module_sp->GetUUID();
86 if (module_uuid.IsValid()) {
Pavel Labath470b2862018-06-21 15:07:43 +000087 llvm::ArrayRef<uint8_t> module_bytes = module_uuid.GetBytes();
Pavel Labath77c397f2018-06-29 11:20:29 +000088 if (module_bytes.size() >= uuid_bytes.size() &&
89 module_bytes.take_front(uuid_bytes.size()).equals(uuid_bytes)) {
Pavel Labath470b2862018-06-21 15:07:43 +000090 matches.AppendString(module_uuid.GetAsString());
Greg Clayton67cc0632012-08-22 17:17:09 +000091 }
Kate Stoneb9c1b512016-09-06 20:57:50 +000092 }
Greg Claytonb5f0fea2012-09-27 22:26:11 +000093 }
Kate Stoneb9c1b512016-09-06 20:57:50 +000094 }
Greg Claytonb5f0fea2012-09-27 22:26:11 +000095 }
Kate Stoneb9c1b512016-09-06 20:57:50 +000096 }
97 return matches.GetSize();
Greg Claytonb5f0fea2012-09-27 22:26:11 +000098}