Path: blob/main/contrib/llvm-project/lldb/source/Interpreter/OptionValueUUID.cpp
39587 views
//===-- OptionValueUUID.cpp -----------------------------------------------===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//78#include "lldb/Interpreter/OptionValueUUID.h"910#include "lldb/Core/Module.h"11#include "lldb/Interpreter/CommandInterpreter.h"12#include "lldb/Utility/Stream.h"13#include "lldb/Utility/StringList.h"1415using namespace lldb;16using namespace lldb_private;1718void OptionValueUUID::DumpValue(const ExecutionContext *exe_ctx, Stream &strm,19uint32_t dump_mask) {20if (dump_mask & eDumpOptionType)21strm.Printf("(%s)", GetTypeAsCString());22if (dump_mask & eDumpOptionValue) {23if (dump_mask & eDumpOptionType)24strm.PutCString(" = ");25m_uuid.Dump(strm);26}27}2829Status OptionValueUUID::SetValueFromString(llvm::StringRef value,30VarSetOperationType op) {31Status error;32switch (op) {33case eVarSetOperationClear:34Clear();35NotifyValueChanged();36break;3738case eVarSetOperationReplace:39case eVarSetOperationAssign: {40if (!m_uuid.SetFromStringRef(value))41error.SetErrorStringWithFormat("invalid uuid string value '%s'",42value.str().c_str());43else {44m_value_was_set = true;45NotifyValueChanged();46}47} break;4849case eVarSetOperationInsertBefore:50case eVarSetOperationInsertAfter:51case eVarSetOperationRemove:52case eVarSetOperationAppend:53case eVarSetOperationInvalid:54error = OptionValue::SetValueFromString(value, op);55break;56}57return error;58}5960void OptionValueUUID::AutoComplete(CommandInterpreter &interpreter,61CompletionRequest &request) {62ExecutionContext exe_ctx(interpreter.GetExecutionContext());63Target *target = exe_ctx.GetTargetPtr();64if (!target)65return;66auto prefix = request.GetCursorArgumentPrefix();67llvm::SmallVector<uint8_t, 20> uuid_bytes;68if (!UUID::DecodeUUIDBytesFromString(prefix, uuid_bytes).empty())69return;70const size_t num_modules = target->GetImages().GetSize();71for (size_t i = 0; i < num_modules; ++i) {72ModuleSP module_sp(target->GetImages().GetModuleAtIndex(i));73if (!module_sp)74continue;75const UUID &module_uuid = module_sp->GetUUID();76if (!module_uuid.IsValid())77continue;78request.TryCompleteCurrentArg(module_uuid.GetAsString());79}80}818283