Chris Lattner | 24943d2 | 2010-06-08 16:52:24 +0000 | [diff] [blame] | 1 | //===-- SBError.cpp ---------------------------------------------*- C++ -*-===// |
2 | // | ||||
3 | // The LLVM Compiler Infrastructure | ||||
4 | // | ||||
5 | // This file is distributed under the University of Illinois Open Source | ||||
6 | // License. See LICENSE.TXT for details. | ||||
7 | // | ||||
8 | //===----------------------------------------------------------------------===// | ||||
9 | |||||
10 | #include "lldb/API/SBError.h" | ||||
11 | #include "lldb/Core/Error.h" | ||||
Eli Friedman | 1501a96 | 2010-06-09 08:46:23 +0000 | [diff] [blame] | 12 | #include <stdarg.h> |
Chris Lattner | 24943d2 | 2010-06-08 16:52:24 +0000 | [diff] [blame] | 13 | |
14 | using namespace lldb; | ||||
15 | using namespace lldb_private; | ||||
16 | |||||
17 | |||||
18 | SBError::SBError () : | ||||
Greg Clayton | 63094e0 | 2010-06-23 01:19:29 +0000 | [diff] [blame] | 19 | m_opaque_ap () |
Chris Lattner | 24943d2 | 2010-06-08 16:52:24 +0000 | [diff] [blame] | 20 | { |
21 | } | ||||
22 | |||||
23 | SBError::SBError (const SBError &rhs) : | ||||
Greg Clayton | 63094e0 | 2010-06-23 01:19:29 +0000 | [diff] [blame] | 24 | m_opaque_ap () |
Chris Lattner | 24943d2 | 2010-06-08 16:52:24 +0000 | [diff] [blame] | 25 | { |
26 | if (rhs.IsValid()) | ||||
Greg Clayton | 63094e0 | 2010-06-23 01:19:29 +0000 | [diff] [blame] | 27 | m_opaque_ap.reset (new Error(*rhs)); |
Chris Lattner | 24943d2 | 2010-06-08 16:52:24 +0000 | [diff] [blame] | 28 | } |
29 | |||||
30 | |||||
31 | SBError::~SBError() | ||||
32 | { | ||||
33 | } | ||||
34 | |||||
35 | const SBError & | ||||
36 | SBError::operator = (const SBError &rhs) | ||||
37 | { | ||||
38 | if (rhs.IsValid()) | ||||
39 | { | ||||
Greg Clayton | 63094e0 | 2010-06-23 01:19:29 +0000 | [diff] [blame] | 40 | if (m_opaque_ap.get()) |
41 | *m_opaque_ap = *rhs; | ||||
Chris Lattner | 24943d2 | 2010-06-08 16:52:24 +0000 | [diff] [blame] | 42 | else |
Greg Clayton | 63094e0 | 2010-06-23 01:19:29 +0000 | [diff] [blame] | 43 | m_opaque_ap.reset (new Error(*rhs)); |
Chris Lattner | 24943d2 | 2010-06-08 16:52:24 +0000 | [diff] [blame] | 44 | } |
45 | else | ||||
46 | { | ||||
Greg Clayton | 63094e0 | 2010-06-23 01:19:29 +0000 | [diff] [blame] | 47 | m_opaque_ap.reset(); |
Chris Lattner | 24943d2 | 2010-06-08 16:52:24 +0000 | [diff] [blame] | 48 | } |
49 | return *this; | ||||
50 | } | ||||
51 | |||||
52 | |||||
53 | const char * | ||||
54 | SBError::GetCString () const | ||||
55 | { | ||||
Greg Clayton | 63094e0 | 2010-06-23 01:19:29 +0000 | [diff] [blame] | 56 | if (m_opaque_ap.get()) |
57 | return m_opaque_ap->AsCString(); | ||||
Chris Lattner | 24943d2 | 2010-06-08 16:52:24 +0000 | [diff] [blame] | 58 | return NULL; |
59 | } | ||||
60 | |||||
61 | void | ||||
62 | SBError::Clear () | ||||
63 | { | ||||
Greg Clayton | 63094e0 | 2010-06-23 01:19:29 +0000 | [diff] [blame] | 64 | if (m_opaque_ap.get()) |
65 | m_opaque_ap->Clear(); | ||||
Chris Lattner | 24943d2 | 2010-06-08 16:52:24 +0000 | [diff] [blame] | 66 | } |
67 | |||||
68 | bool | ||||
69 | SBError::Fail () const | ||||
70 | { | ||||
Greg Clayton | 63094e0 | 2010-06-23 01:19:29 +0000 | [diff] [blame] | 71 | if (m_opaque_ap.get()) |
72 | return m_opaque_ap->Fail(); | ||||
Chris Lattner | 24943d2 | 2010-06-08 16:52:24 +0000 | [diff] [blame] | 73 | return false; |
74 | } | ||||
75 | |||||
76 | bool | ||||
77 | SBError::Success () const | ||||
78 | { | ||||
Greg Clayton | 63094e0 | 2010-06-23 01:19:29 +0000 | [diff] [blame] | 79 | if (m_opaque_ap.get()) |
80 | return m_opaque_ap->Success(); | ||||
Chris Lattner | 24943d2 | 2010-06-08 16:52:24 +0000 | [diff] [blame] | 81 | return false; |
82 | } | ||||
83 | |||||
84 | uint32_t | ||||
85 | SBError::GetError () const | ||||
86 | { | ||||
Greg Clayton | 63094e0 | 2010-06-23 01:19:29 +0000 | [diff] [blame] | 87 | if (m_opaque_ap.get()) |
88 | return m_opaque_ap->GetError(); | ||||
Chris Lattner | 24943d2 | 2010-06-08 16:52:24 +0000 | [diff] [blame] | 89 | return true; |
90 | } | ||||
91 | |||||
92 | ErrorType | ||||
93 | SBError::GetType () const | ||||
94 | { | ||||
Greg Clayton | 63094e0 | 2010-06-23 01:19:29 +0000 | [diff] [blame] | 95 | if (m_opaque_ap.get()) |
96 | return m_opaque_ap->GetType(); | ||||
Chris Lattner | 24943d2 | 2010-06-08 16:52:24 +0000 | [diff] [blame] | 97 | return eErrorTypeInvalid; |
98 | } | ||||
99 | |||||
100 | void | ||||
101 | SBError::SetError (uint32_t err, ErrorType type) | ||||
102 | { | ||||
103 | CreateIfNeeded (); | ||||
Greg Clayton | 63094e0 | 2010-06-23 01:19:29 +0000 | [diff] [blame] | 104 | m_opaque_ap->SetError (err, type); |
Chris Lattner | 24943d2 | 2010-06-08 16:52:24 +0000 | [diff] [blame] | 105 | } |
106 | |||||
107 | void | ||||
108 | SBError::SetError (const Error &lldb_error) | ||||
109 | { | ||||
110 | CreateIfNeeded (); | ||||
Greg Clayton | 63094e0 | 2010-06-23 01:19:29 +0000 | [diff] [blame] | 111 | *m_opaque_ap = lldb_error; |
Chris Lattner | 24943d2 | 2010-06-08 16:52:24 +0000 | [diff] [blame] | 112 | } |
113 | |||||
114 | |||||
115 | void | ||||
116 | SBError::SetErrorToErrno () | ||||
117 | { | ||||
118 | CreateIfNeeded (); | ||||
Greg Clayton | 63094e0 | 2010-06-23 01:19:29 +0000 | [diff] [blame] | 119 | m_opaque_ap->SetErrorToErrno (); |
Chris Lattner | 24943d2 | 2010-06-08 16:52:24 +0000 | [diff] [blame] | 120 | } |
121 | |||||
122 | void | ||||
123 | SBError::SetErrorToGenericError () | ||||
124 | { | ||||
125 | CreateIfNeeded (); | ||||
Greg Clayton | 63094e0 | 2010-06-23 01:19:29 +0000 | [diff] [blame] | 126 | m_opaque_ap->SetErrorToErrno (); |
Chris Lattner | 24943d2 | 2010-06-08 16:52:24 +0000 | [diff] [blame] | 127 | } |
128 | |||||
129 | void | ||||
130 | SBError::SetErrorString (const char *err_str) | ||||
131 | { | ||||
132 | CreateIfNeeded (); | ||||
Greg Clayton | 63094e0 | 2010-06-23 01:19:29 +0000 | [diff] [blame] | 133 | m_opaque_ap->SetErrorString (err_str); |
Chris Lattner | 24943d2 | 2010-06-08 16:52:24 +0000 | [diff] [blame] | 134 | } |
135 | |||||
136 | int | ||||
137 | SBError::SetErrorStringWithFormat (const char *format, ...) | ||||
138 | { | ||||
139 | CreateIfNeeded (); | ||||
140 | va_list args; | ||||
141 | va_start (args, format); | ||||
Greg Clayton | 63094e0 | 2010-06-23 01:19:29 +0000 | [diff] [blame] | 142 | int num_chars = m_opaque_ap->SetErrorStringWithVarArg (format, args); |
Chris Lattner | 24943d2 | 2010-06-08 16:52:24 +0000 | [diff] [blame] | 143 | va_end (args); |
144 | return num_chars; | ||||
145 | } | ||||
146 | |||||
147 | bool | ||||
148 | SBError::IsValid () const | ||||
149 | { | ||||
Greg Clayton | 63094e0 | 2010-06-23 01:19:29 +0000 | [diff] [blame] | 150 | return m_opaque_ap.get() != NULL; |
Chris Lattner | 24943d2 | 2010-06-08 16:52:24 +0000 | [diff] [blame] | 151 | } |
152 | |||||
153 | void | ||||
154 | SBError::CreateIfNeeded () | ||||
155 | { | ||||
Greg Clayton | 63094e0 | 2010-06-23 01:19:29 +0000 | [diff] [blame] | 156 | if (m_opaque_ap.get() == NULL) |
157 | m_opaque_ap.reset(new Error ()); | ||||
Chris Lattner | 24943d2 | 2010-06-08 16:52:24 +0000 | [diff] [blame] | 158 | } |
159 | |||||
160 | |||||
161 | lldb_private::Error * | ||||
162 | SBError::operator->() | ||||
163 | { | ||||
Greg Clayton | 63094e0 | 2010-06-23 01:19:29 +0000 | [diff] [blame] | 164 | return m_opaque_ap.get(); |
Chris Lattner | 24943d2 | 2010-06-08 16:52:24 +0000 | [diff] [blame] | 165 | } |
166 | |||||
167 | lldb_private::Error * | ||||
168 | SBError::get() | ||||
169 | { | ||||
Greg Clayton | 63094e0 | 2010-06-23 01:19:29 +0000 | [diff] [blame] | 170 | return m_opaque_ap.get(); |
Chris Lattner | 24943d2 | 2010-06-08 16:52:24 +0000 | [diff] [blame] | 171 | } |
172 | |||||
173 | |||||
174 | const lldb_private::Error & | ||||
175 | SBError::operator*() const | ||||
176 | { | ||||
177 | // Be sure to call "IsValid()" before calling this function or it will crash | ||||
Greg Clayton | 63094e0 | 2010-06-23 01:19:29 +0000 | [diff] [blame] | 178 | return *m_opaque_ap; |
Chris Lattner | 24943d2 | 2010-06-08 16:52:24 +0000 | [diff] [blame] | 179 | } |
180 |