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