130fdc8d8SChris Lattner //===-- SBError.cpp ---------------------------------------------*- C++ -*-===//
230fdc8d8SChris Lattner //
330fdc8d8SChris Lattner //                     The LLVM Compiler Infrastructure
430fdc8d8SChris Lattner //
530fdc8d8SChris Lattner // This file is distributed under the University of Illinois Open Source
630fdc8d8SChris Lattner // License. See LICENSE.TXT for details.
730fdc8d8SChris Lattner //
830fdc8d8SChris Lattner //===----------------------------------------------------------------------===//
930fdc8d8SChris Lattner 
1030fdc8d8SChris Lattner #include "lldb/API/SBError.h"
1130fdc8d8SChris Lattner #include "lldb/Core/Error.h"
12*9c68da97SEli Friedman #include <stdarg.h>
1330fdc8d8SChris Lattner 
1430fdc8d8SChris Lattner using namespace lldb;
1530fdc8d8SChris Lattner using namespace lldb_private;
1630fdc8d8SChris Lattner 
1730fdc8d8SChris Lattner 
1830fdc8d8SChris Lattner SBError::SBError () :
1930fdc8d8SChris Lattner     m_lldb_object_ap ()
2030fdc8d8SChris Lattner {
2130fdc8d8SChris Lattner }
2230fdc8d8SChris Lattner 
2330fdc8d8SChris Lattner SBError::SBError (const SBError &rhs) :
2430fdc8d8SChris Lattner     m_lldb_object_ap ()
2530fdc8d8SChris Lattner {
2630fdc8d8SChris Lattner     if (rhs.IsValid())
2730fdc8d8SChris Lattner         m_lldb_object_ap.reset (new Error(*rhs));
2830fdc8d8SChris Lattner }
2930fdc8d8SChris Lattner 
3030fdc8d8SChris Lattner 
3130fdc8d8SChris Lattner SBError::~SBError()
3230fdc8d8SChris Lattner {
3330fdc8d8SChris Lattner }
3430fdc8d8SChris Lattner 
3530fdc8d8SChris Lattner const SBError &
3630fdc8d8SChris Lattner SBError::operator = (const SBError &rhs)
3730fdc8d8SChris Lattner {
3830fdc8d8SChris Lattner     if (rhs.IsValid())
3930fdc8d8SChris Lattner     {
4030fdc8d8SChris Lattner         if (m_lldb_object_ap.get())
4130fdc8d8SChris Lattner             *m_lldb_object_ap = *rhs;
4230fdc8d8SChris Lattner         else
4330fdc8d8SChris Lattner             m_lldb_object_ap.reset (new Error(*rhs));
4430fdc8d8SChris Lattner     }
4530fdc8d8SChris Lattner     else
4630fdc8d8SChris Lattner     {
4730fdc8d8SChris Lattner         m_lldb_object_ap.reset();
4830fdc8d8SChris Lattner     }
4930fdc8d8SChris Lattner     return *this;
5030fdc8d8SChris Lattner }
5130fdc8d8SChris Lattner 
5230fdc8d8SChris Lattner 
5330fdc8d8SChris Lattner const char *
5430fdc8d8SChris Lattner SBError::GetCString () const
5530fdc8d8SChris Lattner {
5630fdc8d8SChris Lattner     if (m_lldb_object_ap.get())
5730fdc8d8SChris Lattner         return m_lldb_object_ap->AsCString();
5830fdc8d8SChris Lattner     return NULL;
5930fdc8d8SChris Lattner }
6030fdc8d8SChris Lattner 
6130fdc8d8SChris Lattner void
6230fdc8d8SChris Lattner SBError::Clear ()
6330fdc8d8SChris Lattner {
6430fdc8d8SChris Lattner     if (m_lldb_object_ap.get())
6530fdc8d8SChris Lattner         m_lldb_object_ap->Clear();
6630fdc8d8SChris Lattner }
6730fdc8d8SChris Lattner 
6830fdc8d8SChris Lattner bool
6930fdc8d8SChris Lattner SBError::Fail () const
7030fdc8d8SChris Lattner {
7130fdc8d8SChris Lattner     if (m_lldb_object_ap.get())
7230fdc8d8SChris Lattner         return m_lldb_object_ap->Fail();
7330fdc8d8SChris Lattner     return false;
7430fdc8d8SChris Lattner }
7530fdc8d8SChris Lattner 
7630fdc8d8SChris Lattner bool
7730fdc8d8SChris Lattner SBError::Success () const
7830fdc8d8SChris Lattner {
7930fdc8d8SChris Lattner     if (m_lldb_object_ap.get())
8030fdc8d8SChris Lattner         return m_lldb_object_ap->Success();
8130fdc8d8SChris Lattner     return false;
8230fdc8d8SChris Lattner }
8330fdc8d8SChris Lattner 
8430fdc8d8SChris Lattner uint32_t
8530fdc8d8SChris Lattner SBError::GetError () const
8630fdc8d8SChris Lattner {
8730fdc8d8SChris Lattner     if (m_lldb_object_ap.get())
8830fdc8d8SChris Lattner         return m_lldb_object_ap->GetError();
8930fdc8d8SChris Lattner     return true;
9030fdc8d8SChris Lattner }
9130fdc8d8SChris Lattner 
9230fdc8d8SChris Lattner ErrorType
9330fdc8d8SChris Lattner SBError::GetType () const
9430fdc8d8SChris Lattner {
9530fdc8d8SChris Lattner     if (m_lldb_object_ap.get())
9630fdc8d8SChris Lattner         return m_lldb_object_ap->GetType();
9730fdc8d8SChris Lattner     return eErrorTypeInvalid;
9830fdc8d8SChris Lattner }
9930fdc8d8SChris Lattner 
10030fdc8d8SChris Lattner void
10130fdc8d8SChris Lattner SBError::SetError (uint32_t err, ErrorType type)
10230fdc8d8SChris Lattner {
10330fdc8d8SChris Lattner     CreateIfNeeded ();
10430fdc8d8SChris Lattner     m_lldb_object_ap->SetError (err, type);
10530fdc8d8SChris Lattner }
10630fdc8d8SChris Lattner 
10730fdc8d8SChris Lattner void
10830fdc8d8SChris Lattner SBError::SetError (const Error &lldb_error)
10930fdc8d8SChris Lattner {
11030fdc8d8SChris Lattner     CreateIfNeeded ();
11130fdc8d8SChris Lattner     *m_lldb_object_ap = lldb_error;
11230fdc8d8SChris Lattner }
11330fdc8d8SChris Lattner 
11430fdc8d8SChris Lattner 
11530fdc8d8SChris Lattner void
11630fdc8d8SChris Lattner SBError::SetErrorToErrno ()
11730fdc8d8SChris Lattner {
11830fdc8d8SChris Lattner     CreateIfNeeded ();
11930fdc8d8SChris Lattner     m_lldb_object_ap->SetErrorToErrno ();
12030fdc8d8SChris Lattner }
12130fdc8d8SChris Lattner 
12230fdc8d8SChris Lattner void
12330fdc8d8SChris Lattner SBError::SetErrorToGenericError ()
12430fdc8d8SChris Lattner {
12530fdc8d8SChris Lattner     CreateIfNeeded ();
12630fdc8d8SChris Lattner     m_lldb_object_ap->SetErrorToErrno ();
12730fdc8d8SChris Lattner }
12830fdc8d8SChris Lattner 
12930fdc8d8SChris Lattner void
13030fdc8d8SChris Lattner SBError::SetErrorString (const char *err_str)
13130fdc8d8SChris Lattner {
13230fdc8d8SChris Lattner     CreateIfNeeded ();
13330fdc8d8SChris Lattner     m_lldb_object_ap->SetErrorString (err_str);
13430fdc8d8SChris Lattner }
13530fdc8d8SChris Lattner 
13630fdc8d8SChris Lattner int
13730fdc8d8SChris Lattner SBError::SetErrorStringWithFormat (const char *format, ...)
13830fdc8d8SChris Lattner {
13930fdc8d8SChris Lattner     CreateIfNeeded ();
14030fdc8d8SChris Lattner     va_list args;
14130fdc8d8SChris Lattner     va_start (args, format);
14230fdc8d8SChris Lattner     int num_chars = m_lldb_object_ap->SetErrorStringWithVarArg (format, args);
14330fdc8d8SChris Lattner     va_end (args);
14430fdc8d8SChris Lattner     return num_chars;
14530fdc8d8SChris Lattner }
14630fdc8d8SChris Lattner 
14730fdc8d8SChris Lattner bool
14830fdc8d8SChris Lattner SBError::IsValid () const
14930fdc8d8SChris Lattner {
15030fdc8d8SChris Lattner     return m_lldb_object_ap.get() != NULL;
15130fdc8d8SChris Lattner }
15230fdc8d8SChris Lattner 
15330fdc8d8SChris Lattner void
15430fdc8d8SChris Lattner SBError::CreateIfNeeded ()
15530fdc8d8SChris Lattner {
15630fdc8d8SChris Lattner     if (m_lldb_object_ap.get() == NULL)
15730fdc8d8SChris Lattner         m_lldb_object_ap.reset(new Error ());
15830fdc8d8SChris Lattner }
15930fdc8d8SChris Lattner 
16030fdc8d8SChris Lattner 
16130fdc8d8SChris Lattner lldb_private::Error *
16230fdc8d8SChris Lattner SBError::operator->()
16330fdc8d8SChris Lattner {
16430fdc8d8SChris Lattner     return m_lldb_object_ap.get();
16530fdc8d8SChris Lattner }
16630fdc8d8SChris Lattner 
16730fdc8d8SChris Lattner lldb_private::Error *
16830fdc8d8SChris Lattner SBError::get()
16930fdc8d8SChris Lattner {
17030fdc8d8SChris Lattner     return m_lldb_object_ap.get();
17130fdc8d8SChris Lattner }
17230fdc8d8SChris Lattner 
17330fdc8d8SChris Lattner 
17430fdc8d8SChris Lattner const lldb_private::Error &
17530fdc8d8SChris Lattner SBError::operator*() const
17630fdc8d8SChris Lattner {
17730fdc8d8SChris Lattner     // Be sure to call "IsValid()" before calling this function or it will crash
17830fdc8d8SChris Lattner     return *m_lldb_object_ap;
17930fdc8d8SChris Lattner }
18030fdc8d8SChris Lattner 
181