xref: /openbsd-src/gnu/llvm/lldb/source/Interpreter/OptionValueUInt64.cpp (revision 061da546b983eb767bad15e67af1174fb0bcf31c)
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