1*061da546Spatrick //===-- OptionValueUInt64.cpp ------------------------------------*- C++ 2*061da546Spatrick //-*-===// 3*061da546Spatrick // 4*061da546Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5*061da546Spatrick // See https://llvm.org/LICENSE.txt for license information. 6*061da546Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7*061da546Spatrick // 8*061da546Spatrick //===----------------------------------------------------------------------===// 9*061da546Spatrick 10*061da546Spatrick #include "lldb/Interpreter/OptionValueUInt64.h" 11*061da546Spatrick 12*061da546Spatrick #include "lldb/Host/StringConvert.h" 13*061da546Spatrick #include "lldb/Utility/Stream.h" 14*061da546Spatrick 15*061da546Spatrick using namespace lldb; 16*061da546Spatrick using namespace lldb_private; 17*061da546Spatrick 18*061da546Spatrick lldb::OptionValueSP OptionValueUInt64::Create(llvm::StringRef value_str, 19*061da546Spatrick Status &error) { 20*061da546Spatrick lldb::OptionValueSP value_sp(new OptionValueUInt64()); 21*061da546Spatrick error = value_sp->SetValueFromString(value_str); 22*061da546Spatrick if (error.Fail()) 23*061da546Spatrick value_sp.reset(); 24*061da546Spatrick return value_sp; 25*061da546Spatrick } 26*061da546Spatrick 27*061da546Spatrick void OptionValueUInt64::DumpValue(const ExecutionContext *exe_ctx, Stream &strm, 28*061da546Spatrick uint32_t dump_mask) { 29*061da546Spatrick if (dump_mask & eDumpOptionType) 30*061da546Spatrick strm.Printf("(%s)", GetTypeAsCString()); 31*061da546Spatrick if (dump_mask & eDumpOptionValue) { 32*061da546Spatrick if (dump_mask & eDumpOptionType) 33*061da546Spatrick strm.PutCString(" = "); 34*061da546Spatrick strm.Printf("%" PRIu64, m_current_value); 35*061da546Spatrick } 36*061da546Spatrick } 37*061da546Spatrick 38*061da546Spatrick Status OptionValueUInt64::SetValueFromString(llvm::StringRef value_ref, 39*061da546Spatrick VarSetOperationType op) { 40*061da546Spatrick Status error; 41*061da546Spatrick switch (op) { 42*061da546Spatrick case eVarSetOperationClear: 43*061da546Spatrick Clear(); 44*061da546Spatrick NotifyValueChanged(); 45*061da546Spatrick break; 46*061da546Spatrick 47*061da546Spatrick case eVarSetOperationReplace: 48*061da546Spatrick case eVarSetOperationAssign: { 49*061da546Spatrick bool success = false; 50*061da546Spatrick std::string value_str = value_ref.trim().str(); 51*061da546Spatrick uint64_t value = StringConvert::ToUInt64(value_str.c_str(), 0, 0, &success); 52*061da546Spatrick if (success) { 53*061da546Spatrick m_value_was_set = true; 54*061da546Spatrick m_current_value = value; 55*061da546Spatrick NotifyValueChanged(); 56*061da546Spatrick } else { 57*061da546Spatrick error.SetErrorStringWithFormat("invalid uint64_t string value: '%s'", 58*061da546Spatrick value_str.c_str()); 59*061da546Spatrick } 60*061da546Spatrick } break; 61*061da546Spatrick 62*061da546Spatrick case eVarSetOperationInsertBefore: 63*061da546Spatrick case eVarSetOperationInsertAfter: 64*061da546Spatrick case eVarSetOperationRemove: 65*061da546Spatrick case eVarSetOperationAppend: 66*061da546Spatrick case eVarSetOperationInvalid: 67*061da546Spatrick error = OptionValue::SetValueFromString(value_ref, op); 68*061da546Spatrick break; 69*061da546Spatrick } 70*061da546Spatrick return error; 71*061da546Spatrick } 72*061da546Spatrick 73*061da546Spatrick lldb::OptionValueSP OptionValueUInt64::DeepCopy() const { 74*061da546Spatrick return OptionValueSP(new OptionValueUInt64(*this)); 75*061da546Spatrick } 76