]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/lldb/source/Interpreter/OptionValueUInt64.cpp
Merge llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / lldb / source / Interpreter / OptionValueUInt64.cpp
1 //===-- OptionValueUInt64.cpp ------------------------------------*- C++
2 //-*-===//
3 //
4 //                     The LLVM Compiler Infrastructure
5 //
6 // This file is distributed under the University of Illinois Open Source
7 // License. See LICENSE.TXT for details.
8 //
9 //===----------------------------------------------------------------------===//
10
11 #include "lldb/Interpreter/OptionValueUInt64.h"
12
13 #include "lldb/Host/StringConvert.h"
14 #include "lldb/Utility/Stream.h"
15
16 using namespace lldb;
17 using namespace lldb_private;
18
19 lldb::OptionValueSP OptionValueUInt64::Create(llvm::StringRef value_str,
20                                               Status &error) {
21   lldb::OptionValueSP value_sp(new OptionValueUInt64());
22   error = value_sp->SetValueFromString(value_str);
23   if (error.Fail())
24     value_sp.reset();
25   return value_sp;
26 }
27
28 void OptionValueUInt64::DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
29                                   uint32_t dump_mask) {
30   if (dump_mask & eDumpOptionType)
31     strm.Printf("(%s)", GetTypeAsCString());
32   if (dump_mask & eDumpOptionValue) {
33     if (dump_mask & eDumpOptionType)
34       strm.PutCString(" = ");
35     strm.Printf("%" PRIu64, m_current_value);
36   }
37 }
38
39 Status OptionValueUInt64::SetValueFromString(llvm::StringRef value_ref,
40                                              VarSetOperationType op) {
41   Status error;
42   switch (op) {
43   case eVarSetOperationClear:
44     Clear();
45     NotifyValueChanged();
46     break;
47
48   case eVarSetOperationReplace:
49   case eVarSetOperationAssign: {
50     bool success = false;
51     std::string value_str = value_ref.trim().str();
52     uint64_t value = StringConvert::ToUInt64(value_str.c_str(), 0, 0, &success);
53     if (success) {
54       m_value_was_set = true;
55       m_current_value = value;
56       NotifyValueChanged();
57     } else {
58       error.SetErrorStringWithFormat("invalid uint64_t string value: '%s'",
59                                      value_str.c_str());
60     }
61   } break;
62
63   case eVarSetOperationInsertBefore:
64   case eVarSetOperationInsertAfter:
65   case eVarSetOperationRemove:
66   case eVarSetOperationAppend:
67   case eVarSetOperationInvalid:
68     error = OptionValue::SetValueFromString(value_ref, op);
69     break;
70   }
71   return error;
72 }
73
74 lldb::OptionValueSP OptionValueUInt64::DeepCopy() const {
75   return OptionValueSP(new OptionValueUInt64(*this));
76 }