brintos

brintos / llvm-project-archived public Read only

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