blob: 8986080bbd22bcd2319d3f0ef74277cd4bf807e6 [file] [log] [blame]
Kate Stoneb9c1b512016-09-06 20:57:50 +00001//===-- OptionValueUInt64.cpp ------------------------------------*- C++
2//-*-===//
Greg Clayton67cc0632012-08-22 17:17:09 +00003//
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// C Includes
14// C++ Includes
15// Other libraries and framework includes
16// Project includes
17#include "lldb/Core/Stream.h"
Vince Harron5275aaa2015-01-15 20:08:35 +000018#include "lldb/Host/StringConvert.h"
Greg Clayton67cc0632012-08-22 17:17:09 +000019
20using namespace lldb;
21using namespace lldb_private;
22
Zachary Turner8cef4b02016-09-23 17:48:13 +000023lldb::OptionValueSP OptionValueUInt64::Create(llvm::StringRef value_str,
Kate Stoneb9c1b512016-09-06 20:57:50 +000024 Error &error) {
25 lldb::OptionValueSP value_sp(new OptionValueUInt64());
Zachary Turner8cef4b02016-09-23 17:48:13 +000026 error = value_sp->SetValueFromString(value_str);
Kate Stoneb9c1b512016-09-06 20:57:50 +000027 if (error.Fail())
28 value_sp.reset();
29 return value_sp;
Greg Clayton67cc0632012-08-22 17:17:09 +000030}
31
Kate Stoneb9c1b512016-09-06 20:57:50 +000032void OptionValueUInt64::DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
33 uint32_t dump_mask) {
34 if (dump_mask & eDumpOptionType)
35 strm.Printf("(%s)", GetTypeAsCString());
36 if (dump_mask & eDumpOptionValue) {
Greg Clayton67cc0632012-08-22 17:17:09 +000037 if (dump_mask & eDumpOptionType)
Kate Stoneb9c1b512016-09-06 20:57:50 +000038 strm.PutCString(" = ");
39 strm.Printf("%" PRIu64, m_current_value);
40 }
41}
42
43Error OptionValueUInt64::SetValueFromString(llvm::StringRef value_ref,
44 VarSetOperationType op) {
45 Error error;
46 switch (op) {
47 case eVarSetOperationClear:
48 Clear();
49 NotifyValueChanged();
50 break;
51
52 case eVarSetOperationReplace:
53 case eVarSetOperationAssign: {
54 bool success = false;
55 std::string value_str = value_ref.trim().str();
56 uint64_t value = StringConvert::ToUInt64(value_str.c_str(), 0, 0, &success);
57 if (success) {
58 m_value_was_set = true;
59 m_current_value = value;
60 NotifyValueChanged();
61 } else {
62 error.SetErrorStringWithFormat("invalid uint64_t string value: '%s'",
63 value_str.c_str());
Greg Clayton67cc0632012-08-22 17:17:09 +000064 }
Kate Stoneb9c1b512016-09-06 20:57:50 +000065 } break;
66
67 case eVarSetOperationInsertBefore:
68 case eVarSetOperationInsertAfter:
69 case eVarSetOperationRemove:
70 case eVarSetOperationAppend:
71 case eVarSetOperationInvalid:
72 error = OptionValue::SetValueFromString(value_ref, op);
73 break;
74 }
75 return error;
Greg Clayton67cc0632012-08-22 17:17:09 +000076}
77
Kate Stoneb9c1b512016-09-06 20:57:50 +000078lldb::OptionValueSP OptionValueUInt64::DeepCopy() const {
79 return OptionValueSP(new OptionValueUInt64(*this));
Greg Clayton67cc0632012-08-22 17:17:09 +000080}