blob: e91c94d2c8fc018d3f7f43864f5cb8df3bd20a16 [file] [log] [blame]
Chris Lattner24943d22010-06-08 16:52:24 +00001//===-- 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 Friedman1501a962010-06-09 08:46:23 +000012#include <stdarg.h>
Chris Lattner24943d22010-06-08 16:52:24 +000013
14using namespace lldb;
15using namespace lldb_private;
16
17
18SBError::SBError () :
Greg Clayton63094e02010-06-23 01:19:29 +000019 m_opaque_ap ()
Chris Lattner24943d22010-06-08 16:52:24 +000020{
21}
22
23SBError::SBError (const SBError &rhs) :
Greg Clayton63094e02010-06-23 01:19:29 +000024 m_opaque_ap ()
Chris Lattner24943d22010-06-08 16:52:24 +000025{
26 if (rhs.IsValid())
Greg Clayton63094e02010-06-23 01:19:29 +000027 m_opaque_ap.reset (new Error(*rhs));
Chris Lattner24943d22010-06-08 16:52:24 +000028}
29
30
31SBError::~SBError()
32{
33}
34
35const SBError &
36SBError::operator = (const SBError &rhs)
37{
38 if (rhs.IsValid())
39 {
Greg Clayton63094e02010-06-23 01:19:29 +000040 if (m_opaque_ap.get())
41 *m_opaque_ap = *rhs;
Chris Lattner24943d22010-06-08 16:52:24 +000042 else
Greg Clayton63094e02010-06-23 01:19:29 +000043 m_opaque_ap.reset (new Error(*rhs));
Chris Lattner24943d22010-06-08 16:52:24 +000044 }
45 else
46 {
Greg Clayton63094e02010-06-23 01:19:29 +000047 m_opaque_ap.reset();
Chris Lattner24943d22010-06-08 16:52:24 +000048 }
49 return *this;
50}
51
52
53const char *
54SBError::GetCString () const
55{
Greg Clayton63094e02010-06-23 01:19:29 +000056 if (m_opaque_ap.get())
57 return m_opaque_ap->AsCString();
Chris Lattner24943d22010-06-08 16:52:24 +000058 return NULL;
59}
60
61void
62SBError::Clear ()
63{
Greg Clayton63094e02010-06-23 01:19:29 +000064 if (m_opaque_ap.get())
65 m_opaque_ap->Clear();
Chris Lattner24943d22010-06-08 16:52:24 +000066}
67
68bool
69SBError::Fail () const
70{
Greg Clayton63094e02010-06-23 01:19:29 +000071 if (m_opaque_ap.get())
72 return m_opaque_ap->Fail();
Chris Lattner24943d22010-06-08 16:52:24 +000073 return false;
74}
75
76bool
77SBError::Success () const
78{
Greg Clayton63094e02010-06-23 01:19:29 +000079 if (m_opaque_ap.get())
80 return m_opaque_ap->Success();
Chris Lattner24943d22010-06-08 16:52:24 +000081 return false;
82}
83
84uint32_t
85SBError::GetError () const
86{
Greg Clayton63094e02010-06-23 01:19:29 +000087 if (m_opaque_ap.get())
88 return m_opaque_ap->GetError();
Chris Lattner24943d22010-06-08 16:52:24 +000089 return true;
90}
91
92ErrorType
93SBError::GetType () const
94{
Greg Clayton63094e02010-06-23 01:19:29 +000095 if (m_opaque_ap.get())
96 return m_opaque_ap->GetType();
Chris Lattner24943d22010-06-08 16:52:24 +000097 return eErrorTypeInvalid;
98}
99
100void
101SBError::SetError (uint32_t err, ErrorType type)
102{
103 CreateIfNeeded ();
Greg Clayton63094e02010-06-23 01:19:29 +0000104 m_opaque_ap->SetError (err, type);
Chris Lattner24943d22010-06-08 16:52:24 +0000105}
106
107void
108SBError::SetError (const Error &lldb_error)
109{
110 CreateIfNeeded ();
Greg Clayton63094e02010-06-23 01:19:29 +0000111 *m_opaque_ap = lldb_error;
Chris Lattner24943d22010-06-08 16:52:24 +0000112}
113
114
115void
116SBError::SetErrorToErrno ()
117{
118 CreateIfNeeded ();
Greg Clayton63094e02010-06-23 01:19:29 +0000119 m_opaque_ap->SetErrorToErrno ();
Chris Lattner24943d22010-06-08 16:52:24 +0000120}
121
122void
123SBError::SetErrorToGenericError ()
124{
125 CreateIfNeeded ();
Greg Clayton63094e02010-06-23 01:19:29 +0000126 m_opaque_ap->SetErrorToErrno ();
Chris Lattner24943d22010-06-08 16:52:24 +0000127}
128
129void
130SBError::SetErrorString (const char *err_str)
131{
132 CreateIfNeeded ();
Greg Clayton63094e02010-06-23 01:19:29 +0000133 m_opaque_ap->SetErrorString (err_str);
Chris Lattner24943d22010-06-08 16:52:24 +0000134}
135
136int
137SBError::SetErrorStringWithFormat (const char *format, ...)
138{
139 CreateIfNeeded ();
140 va_list args;
141 va_start (args, format);
Greg Clayton63094e02010-06-23 01:19:29 +0000142 int num_chars = m_opaque_ap->SetErrorStringWithVarArg (format, args);
Chris Lattner24943d22010-06-08 16:52:24 +0000143 va_end (args);
144 return num_chars;
145}
146
147bool
148SBError::IsValid () const
149{
Greg Clayton63094e02010-06-23 01:19:29 +0000150 return m_opaque_ap.get() != NULL;
Chris Lattner24943d22010-06-08 16:52:24 +0000151}
152
153void
154SBError::CreateIfNeeded ()
155{
Greg Clayton63094e02010-06-23 01:19:29 +0000156 if (m_opaque_ap.get() == NULL)
157 m_opaque_ap.reset(new Error ());
Chris Lattner24943d22010-06-08 16:52:24 +0000158}
159
160
161lldb_private::Error *
162SBError::operator->()
163{
Greg Clayton63094e02010-06-23 01:19:29 +0000164 return m_opaque_ap.get();
Chris Lattner24943d22010-06-08 16:52:24 +0000165}
166
167lldb_private::Error *
168SBError::get()
169{
Greg Clayton63094e02010-06-23 01:19:29 +0000170 return m_opaque_ap.get();
Chris Lattner24943d22010-06-08 16:52:24 +0000171}
172
173
174const lldb_private::Error &
175SBError::operator*() const
176{
177 // Be sure to call "IsValid()" before calling this function or it will crash
Greg Clayton63094e02010-06-23 01:19:29 +0000178 return *m_opaque_ap;
Chris Lattner24943d22010-06-08 16:52:24 +0000179}
180