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