xref: /freebsd-src/contrib/llvm-project/lldb/source/Interpreter/OptionValueUUID.cpp (revision 06c3fb2749bda94cb5201f81ffdb8fa6c3161b2e)
15ffd83dbSDimitry Andric //===-- OptionValueUUID.cpp -----------------------------------------------===//
20b57cec5SDimitry Andric //
30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60b57cec5SDimitry Andric //
70b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
80b57cec5SDimitry Andric 
90b57cec5SDimitry Andric #include "lldb/Interpreter/OptionValueUUID.h"
100b57cec5SDimitry Andric 
110b57cec5SDimitry Andric #include "lldb/Core/Module.h"
120b57cec5SDimitry Andric #include "lldb/Interpreter/CommandInterpreter.h"
130b57cec5SDimitry Andric #include "lldb/Utility/Stream.h"
140b57cec5SDimitry Andric #include "lldb/Utility/StringList.h"
150b57cec5SDimitry Andric 
160b57cec5SDimitry Andric using namespace lldb;
170b57cec5SDimitry Andric using namespace lldb_private;
180b57cec5SDimitry Andric 
DumpValue(const ExecutionContext * exe_ctx,Stream & strm,uint32_t dump_mask)190b57cec5SDimitry Andric void OptionValueUUID::DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
200b57cec5SDimitry Andric                                 uint32_t dump_mask) {
210b57cec5SDimitry Andric   if (dump_mask & eDumpOptionType)
220b57cec5SDimitry Andric     strm.Printf("(%s)", GetTypeAsCString());
230b57cec5SDimitry Andric   if (dump_mask & eDumpOptionValue) {
240b57cec5SDimitry Andric     if (dump_mask & eDumpOptionType)
250b57cec5SDimitry Andric       strm.PutCString(" = ");
26*06c3fb27SDimitry Andric     m_uuid.Dump(strm);
270b57cec5SDimitry Andric   }
280b57cec5SDimitry Andric }
290b57cec5SDimitry Andric 
SetValueFromString(llvm::StringRef value,VarSetOperationType op)300b57cec5SDimitry Andric Status OptionValueUUID::SetValueFromString(llvm::StringRef value,
310b57cec5SDimitry Andric                                            VarSetOperationType op) {
320b57cec5SDimitry Andric   Status error;
330b57cec5SDimitry Andric   switch (op) {
340b57cec5SDimitry Andric   case eVarSetOperationClear:
350b57cec5SDimitry Andric     Clear();
360b57cec5SDimitry Andric     NotifyValueChanged();
370b57cec5SDimitry Andric     break;
380b57cec5SDimitry Andric 
390b57cec5SDimitry Andric   case eVarSetOperationReplace:
400b57cec5SDimitry Andric   case eVarSetOperationAssign: {
415ffd83dbSDimitry Andric     if (!m_uuid.SetFromStringRef(value))
420b57cec5SDimitry Andric       error.SetErrorStringWithFormat("invalid uuid string value '%s'",
430b57cec5SDimitry Andric                                      value.str().c_str());
440b57cec5SDimitry Andric     else {
450b57cec5SDimitry Andric       m_value_was_set = true;
460b57cec5SDimitry Andric       NotifyValueChanged();
470b57cec5SDimitry Andric     }
480b57cec5SDimitry Andric   } break;
490b57cec5SDimitry Andric 
500b57cec5SDimitry Andric   case eVarSetOperationInsertBefore:
510b57cec5SDimitry Andric   case eVarSetOperationInsertAfter:
520b57cec5SDimitry Andric   case eVarSetOperationRemove:
530b57cec5SDimitry Andric   case eVarSetOperationAppend:
540b57cec5SDimitry Andric   case eVarSetOperationInvalid:
550b57cec5SDimitry Andric     error = OptionValue::SetValueFromString(value, op);
560b57cec5SDimitry Andric     break;
570b57cec5SDimitry Andric   }
580b57cec5SDimitry Andric   return error;
590b57cec5SDimitry Andric }
600b57cec5SDimitry Andric 
AutoComplete(CommandInterpreter & interpreter,CompletionRequest & request)619dba64beSDimitry Andric void OptionValueUUID::AutoComplete(CommandInterpreter &interpreter,
620b57cec5SDimitry Andric                                    CompletionRequest &request) {
630b57cec5SDimitry Andric   ExecutionContext exe_ctx(interpreter.GetExecutionContext());
640b57cec5SDimitry Andric   Target *target = exe_ctx.GetTargetPtr();
659dba64beSDimitry Andric   if (!target)
669dba64beSDimitry Andric     return;
670b57cec5SDimitry Andric   auto prefix = request.GetCursorArgumentPrefix();
680b57cec5SDimitry Andric   llvm::SmallVector<uint8_t, 20> uuid_bytes;
699dba64beSDimitry Andric   if (!UUID::DecodeUUIDBytesFromString(prefix, uuid_bytes).empty())
709dba64beSDimitry Andric     return;
710b57cec5SDimitry Andric   const size_t num_modules = target->GetImages().GetSize();
720b57cec5SDimitry Andric   for (size_t i = 0; i < num_modules; ++i) {
730b57cec5SDimitry Andric     ModuleSP module_sp(target->GetImages().GetModuleAtIndex(i));
749dba64beSDimitry Andric     if (!module_sp)
759dba64beSDimitry Andric       continue;
760b57cec5SDimitry Andric     const UUID &module_uuid = module_sp->GetUUID();
779dba64beSDimitry Andric     if (!module_uuid.IsValid())
789dba64beSDimitry Andric       continue;
799dba64beSDimitry Andric     request.TryCompleteCurrentArg(module_uuid.GetAsString());
800b57cec5SDimitry Andric   }
810b57cec5SDimitry Andric }
82