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