OptionValueUUID.cpp revision 360784
1230592Sken//===-- OptionValueUUID.cpp ------------------------------------*- C++ -*-===// 2237683Sken// 3230592Sken// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4230592Sken// See https://llvm.org/LICENSE.txt for license information. 5230592Sken// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6230592Sken// 7230592Sken//===----------------------------------------------------------------------===// 8230592Sken 9230592Sken#include "lldb/Interpreter/OptionValueUUID.h" 10230592Sken 11230592Sken#include "lldb/Core/Module.h" 12230592Sken#include "lldb/Interpreter/CommandInterpreter.h" 13230592Sken#include "lldb/Utility/Stream.h" 14230592Sken#include "lldb/Utility/StringList.h" 15230592Sken 16230592Skenusing namespace lldb; 17230592Skenusing namespace lldb_private; 18230592Sken 19230592Skenvoid OptionValueUUID::DumpValue(const ExecutionContext *exe_ctx, Stream &strm, 20230592Sken uint32_t dump_mask) { 21230592Sken if (dump_mask & eDumpOptionType) 22230592Sken strm.Printf("(%s)", GetTypeAsCString()); 23230592Sken if (dump_mask & eDumpOptionValue) { 24230592Sken if (dump_mask & eDumpOptionType) 25230592Sken strm.PutCString(" = "); 26230592Sken m_uuid.Dump(&strm); 27230592Sken } 28230592Sken} 29230592Sken 30230592SkenStatus OptionValueUUID::SetValueFromString(llvm::StringRef value, 31212420Sken VarSetOperationType op) { 32237683Sken Status error; 33212420Sken switch (op) { 34212420Sken case eVarSetOperationClear: 35212420Sken Clear(); 36212420Sken NotifyValueChanged(); 37212420Sken break; 38212420Sken 39230592Sken case eVarSetOperationReplace: 40212420Sken case eVarSetOperationAssign: { 41212420Sken if (m_uuid.SetFromStringRef(value) == 0) 42212420Sken error.SetErrorStringWithFormat("invalid uuid string value '%s'", 43212420Sken value.str().c_str()); 44212420Sken else { 45212420Sken m_value_was_set = true; 46212420Sken NotifyValueChanged(); 47212420Sken } 48212420Sken } break; 49212420Sken 50212420Sken case eVarSetOperationInsertBefore: 51212420Sken case eVarSetOperationInsertAfter: 52212420Sken case eVarSetOperationRemove: 53212420Sken case eVarSetOperationAppend: 54212420Sken case eVarSetOperationInvalid: 55230592Sken error = OptionValue::SetValueFromString(value, op); 56230592Sken break; 57230592Sken } 58212420Sken return error; 59212420Sken} 60212420Sken 61212420Skenlldb::OptionValueSP OptionValueUUID::DeepCopy() const { 62212420Sken return OptionValueSP(new OptionValueUUID(*this)); 63212420Sken} 64212420Sken 65212420Skenvoid OptionValueUUID::AutoComplete(CommandInterpreter &interpreter, 66212420Sken CompletionRequest &request) { 67212420Sken ExecutionContext exe_ctx(interpreter.GetExecutionContext()); 68212420Sken Target *target = exe_ctx.GetTargetPtr(); 69212420Sken if (!target) 70212420Sken return; 71212420Sken auto prefix = request.GetCursorArgumentPrefix(); 72212420Sken llvm::SmallVector<uint8_t, 20> uuid_bytes; 73230592Sken if (!UUID::DecodeUUIDBytesFromString(prefix, uuid_bytes).empty()) 74212420Sken return; 75212420Sken const size_t num_modules = target->GetImages().GetSize(); 76212420Sken for (size_t i = 0; i < num_modules; ++i) { 77212420Sken ModuleSP module_sp(target->GetImages().GetModuleAtIndex(i)); 78212420Sken if (!module_sp) 79212420Sken continue; 80212420Sken const UUID &module_uuid = module_sp->GetUUID(); 81212420Sken if (!module_uuid.IsValid()) 82212420Sken continue; 83212420Sken request.TryCompleteCurrentArg(module_uuid.GetAsString()); 84212420Sken } 85212420Sken} 86212420Sken