blob: 7fa155277cecba9f8610f69d26db6c1bf5b8bf05 [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,
Raphael Isemanna2e76c02018-07-13 18:28:14 +000071 CompletionRequest &request) {
72 request.SetWordComplete(false);
73 request.GetMatches().Clear();
Kate Stoneb9c1b512016-09-06 20:57:50 +000074 ExecutionContext exe_ctx(interpreter.GetExecutionContext());
75 Target *target = exe_ctx.GetTargetPtr();
76 if (target) {
Raphael Isemanna2e76c02018-07-13 18:28:14 +000077 auto prefix = request.GetCursorArgumentPrefix();
Pavel Labath77c397f2018-06-29 11:20:29 +000078 llvm::SmallVector<uint8_t, 20> uuid_bytes;
Raphael Isemanna2e76c02018-07-13 18:28:14 +000079 if (UUID::DecodeUUIDBytesFromString(prefix, uuid_bytes).empty()) {
Pavel Labath77c397f2018-06-29 11:20:29 +000080 const size_t num_modules = target->GetImages().GetSize();
Kate Stoneb9c1b512016-09-06 20:57:50 +000081 for (size_t i = 0; i < num_modules; ++i) {
82 ModuleSP module_sp(target->GetImages().GetModuleAtIndex(i));
83 if (module_sp) {
84 const UUID &module_uuid = module_sp->GetUUID();
85 if (module_uuid.IsValid()) {
Pavel Labath470b2862018-06-21 15:07:43 +000086 llvm::ArrayRef<uint8_t> module_bytes = module_uuid.GetBytes();
Pavel Labath77c397f2018-06-29 11:20:29 +000087 if (module_bytes.size() >= uuid_bytes.size() &&
88 module_bytes.take_front(uuid_bytes.size()).equals(uuid_bytes)) {
Raphael Isemanna2e76c02018-07-13 18:28:14 +000089 request.GetMatches().AppendString(module_uuid.GetAsString());
Greg Clayton67cc0632012-08-22 17:17:09 +000090 }
Kate Stoneb9c1b512016-09-06 20:57:50 +000091 }
Greg Claytonb5f0fea2012-09-27 22:26:11 +000092 }
Kate Stoneb9c1b512016-09-06 20:57:50 +000093 }
Greg Claytonb5f0fea2012-09-27 22:26:11 +000094 }
Kate Stoneb9c1b512016-09-06 20:57:50 +000095 }
Raphael Isemanna2e76c02018-07-13 18:28:14 +000096 return request.GetMatches().GetSize();
Greg Claytonb5f0fea2012-09-27 22:26:11 +000097}