173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton//===-- OptionValueUUID.cpp ------------------------------------*- C++ -*-===// 273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// 373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// The LLVM Compiler Infrastructure 473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// 573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// This file is distributed under the University of Illinois Open Source 673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// License. See LICENSE.TXT for details. 773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// 873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton//===----------------------------------------------------------------------===// 973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton 10d891f9b872103235cfd2ed452c6f14a4394d9b3aDaniel Malea#include "lldb/lldb-python.h" 11d891f9b872103235cfd2ed452c6f14a4394d9b3aDaniel Malea 1273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton#include "lldb/Interpreter/OptionValueUUID.h" 1373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton 1473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// C Includes 1573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// C++ Includes 1673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// Other libraries and framework includes 1773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// Project includes 18437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton#include "lldb/Core/Module.h" 1973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton#include "lldb/Core/Stream.h" 20437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton#include "lldb/Core/StringList.h" 21437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton#include "lldb/Interpreter/CommandInterpreter.h" 2273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton 2373844aa19a7360b662e2be710fc3c969d6c86606Greg Claytonusing namespace lldb; 2473844aa19a7360b662e2be710fc3c969d6c86606Greg Claytonusing namespace lldb_private; 2573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton 2673844aa19a7360b662e2be710fc3c969d6c86606Greg Claytonvoid 2773844aa19a7360b662e2be710fc3c969d6c86606Greg ClaytonOptionValueUUID::DumpValue (const ExecutionContext *exe_ctx, Stream &strm, uint32_t dump_mask) 2873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton{ 2973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton if (dump_mask & eDumpOptionType) 3073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton strm.Printf ("(%s)", GetTypeAsCString ()); 3173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton if (dump_mask & eDumpOptionValue) 3273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton { 3373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton if (dump_mask & eDumpOptionType) 3473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton strm.PutCString (" = "); 3573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton m_uuid.Dump (&strm); 3673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton } 3773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton} 3873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton 3973844aa19a7360b662e2be710fc3c969d6c86606Greg ClaytonError 4073844aa19a7360b662e2be710fc3c969d6c86606Greg ClaytonOptionValueUUID::SetValueFromCString (const char *value_cstr, 4173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton VarSetOperationType op) 4273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton{ 4373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton Error error; 4473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton switch (op) 4573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton { 4673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton case eVarSetOperationClear: 4773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton Clear(); 4873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton break; 4973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton 5073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton case eVarSetOperationReplace: 5173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton case eVarSetOperationAssign: 5273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton { 53437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton if (m_uuid.SetFromCString(value_cstr) == 0) 5473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton error.SetErrorStringWithFormat ("invalid uuid string value '%s'", value_cstr); 5573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton else 5673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton m_value_was_set = true; 5773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton } 5873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton break; 5973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton 6073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton case eVarSetOperationInsertBefore: 6173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton case eVarSetOperationInsertAfter: 6273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton case eVarSetOperationRemove: 6373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton case eVarSetOperationAppend: 6473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton case eVarSetOperationInvalid: 6573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton error = OptionValue::SetValueFromCString (value_cstr, op); 6673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton break; 6773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton } 6873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton return error; 6973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton} 7073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton 7173844aa19a7360b662e2be710fc3c969d6c86606Greg Claytonlldb::OptionValueSP 7273844aa19a7360b662e2be710fc3c969d6c86606Greg ClaytonOptionValueUUID::DeepCopy () const 7373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton{ 7473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton return OptionValueSP(new OptionValueUUID(*this)); 7573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton} 76437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton 77437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Claytonsize_t 78437b5bccea45a5981edbbbeb4e23424aec4ce774Greg ClaytonOptionValueUUID::AutoComplete (CommandInterpreter &interpreter, 79437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton const char *s, 80437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton int match_start_point, 81437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton int max_return_elements, 82437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton bool &word_complete, 83437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton StringList &matches) 84437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton{ 85437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton word_complete = false; 86437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton matches.Clear(); 87437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton ExecutionContext exe_ctx(interpreter.GetExecutionContext()); 88437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton Target *target = exe_ctx.GetTargetPtr(); 89437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton if (target) 90437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton { 91437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton const size_t num_modules = target->GetImages().GetSize(); 92437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton if (num_modules > 0) 93437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton { 94437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton UUID::ValueType uuid_bytes; 95437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton const size_t num_bytes_decoded = UUID::DecodeUUIDBytesFromCString(s, uuid_bytes, NULL); 96437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton for (size_t i=0; i<num_modules; ++i) 97437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton { 98437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton ModuleSP module_sp (target->GetImages().GetModuleAtIndex(i)); 99437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton if (module_sp) 100437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton { 101437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton const UUID &module_uuid = module_sp->GetUUID(); 102437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton if (module_uuid.IsValid()) 103437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton { 104437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton bool add_uuid = false; 105437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton if (num_bytes_decoded == 0) 106437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton add_uuid = true; 107437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton else 108437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton add_uuid = ::memcmp(module_uuid.GetBytes(), uuid_bytes, num_bytes_decoded) == 0; 109437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton if (add_uuid) 110437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton { 11142b336cd509cad89be08f78775d3b1c8c7656a1bJason Molenda std::string uuid_str; 11242b336cd509cad89be08f78775d3b1c8c7656a1bJason Molenda uuid_str = module_uuid.GetAsString(); 11342b336cd509cad89be08f78775d3b1c8c7656a1bJason Molenda if (!uuid_str.empty()) 11442b336cd509cad89be08f78775d3b1c8c7656a1bJason Molenda matches.AppendString(uuid_str.c_str()); 115437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton } 116437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton } 117437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton } 118437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton } 119437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton } 120437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton } 121437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton return matches.GetSize(); 122437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton} 123437b5bccea45a5981edbbbeb4e23424aec4ce774Greg Clayton 124