130fdc8d8SChris Lattner //===-- SBEvent.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 104c5de699SEli Friedman #include "lldb/API/SBEvent.h" 114c5de699SEli Friedman #include "lldb/API/SBBroadcaster.h" 12dde9cff3SCaroline Tice #include "lldb/API/SBStream.h" 1330fdc8d8SChris Lattner 1430fdc8d8SChris Lattner #include "lldb/Core/Event.h" 1530fdc8d8SChris Lattner #include "lldb/Core/Stream.h" 1630fdc8d8SChris Lattner #include "lldb/Core/StreamFile.h" 1730fdc8d8SChris Lattner #include "lldb/Core/ConstString.h" 1830fdc8d8SChris Lattner #include "lldb/Target/Process.h" 1930fdc8d8SChris Lattner #include "lldb/Breakpoint/Breakpoint.h" 2030fdc8d8SChris Lattner #include "lldb/Interpreter/CommandInterpreter.h" 2130fdc8d8SChris Lattner 2230fdc8d8SChris Lattner using namespace lldb; 2330fdc8d8SChris Lattner using namespace lldb_private; 2430fdc8d8SChris Lattner 2530fdc8d8SChris Lattner 2630fdc8d8SChris Lattner SBEvent::SBEvent () : 2730fdc8d8SChris Lattner m_event_sp (), 286611103cSGreg Clayton m_opaque (NULL) 2930fdc8d8SChris Lattner { 3030fdc8d8SChris Lattner } 3130fdc8d8SChris Lattner 3230fdc8d8SChris Lattner SBEvent::SBEvent (uint32_t event_type, const char *cstr, uint32_t cstr_len) : 3330fdc8d8SChris Lattner m_event_sp (new Event (event_type, new EventDataBytes (cstr, cstr_len))), 346611103cSGreg Clayton m_opaque (m_event_sp.get()) 3530fdc8d8SChris Lattner { 36*750cd175SCaroline Tice Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 37ceb6b139SCaroline Tice 38ceb6b139SCaroline Tice if (log) 39ceb6b139SCaroline Tice { 40*750cd175SCaroline Tice log->Printf ("SBEvent::SBEvent (event_type=%d, cstr='%s', cstr_len=%d) => this.sp = %p", event_type, 41*750cd175SCaroline Tice cstr, cstr_len, m_opaque); 42ceb6b139SCaroline Tice } 4330fdc8d8SChris Lattner } 4430fdc8d8SChris Lattner 4530fdc8d8SChris Lattner SBEvent::SBEvent (EventSP &event_sp) : 4630fdc8d8SChris Lattner m_event_sp (event_sp), 476611103cSGreg Clayton m_opaque (event_sp.get()) 4830fdc8d8SChris Lattner { 49*750cd175SCaroline Tice Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 50ceb6b139SCaroline Tice 51ceb6b139SCaroline Tice if (log) 52*750cd175SCaroline Tice log->Printf ("SBEvent::SBEvent (event_sp=%p) => this.sp = %p", event_sp.get(), m_opaque); 5330fdc8d8SChris Lattner } 5430fdc8d8SChris Lattner 5530fdc8d8SChris Lattner SBEvent::~SBEvent() 5630fdc8d8SChris Lattner { 5730fdc8d8SChris Lattner } 5830fdc8d8SChris Lattner 5930fdc8d8SChris Lattner const char * 6030fdc8d8SChris Lattner SBEvent::GetDataFlavor () 6130fdc8d8SChris Lattner { 626611103cSGreg Clayton Event *lldb_event = get(); 6330fdc8d8SChris Lattner if (lldb_event) 6430fdc8d8SChris Lattner return lldb_event->GetData()->GetFlavor().AsCString(); 6530fdc8d8SChris Lattner return NULL; 6630fdc8d8SChris Lattner } 6730fdc8d8SChris Lattner 6830fdc8d8SChris Lattner uint32_t 6930fdc8d8SChris Lattner SBEvent::GetType () const 7030fdc8d8SChris Lattner { 71ceb6b139SCaroline Tice Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 72ceb6b139SCaroline Tice 73*750cd175SCaroline Tice //if (log) 74*750cd175SCaroline Tice // log->Printf ("SBEvent::GetType ()"); 75ceb6b139SCaroline Tice 766611103cSGreg Clayton const Event *lldb_event = get(); 77ceb6b139SCaroline Tice uint32_t event_type = 0; 7830fdc8d8SChris Lattner if (lldb_event) 79ceb6b139SCaroline Tice event_type = lldb_event->GetType(); 80ceb6b139SCaroline Tice 81ceb6b139SCaroline Tice if (log) 82*750cd175SCaroline Tice log->Printf ("SBEvent::GetType (this.sp=%p) => %d", m_opaque, event_type); 83ceb6b139SCaroline Tice 84ceb6b139SCaroline Tice return event_type; 8530fdc8d8SChris Lattner } 8630fdc8d8SChris Lattner 8730fdc8d8SChris Lattner SBBroadcaster 8830fdc8d8SChris Lattner SBEvent::GetBroadcaster () const 8930fdc8d8SChris Lattner { 9030fdc8d8SChris Lattner SBBroadcaster broadcaster; 916611103cSGreg Clayton const Event *lldb_event = get(); 9230fdc8d8SChris Lattner if (lldb_event) 936611103cSGreg Clayton broadcaster.reset (lldb_event->GetBroadcaster(), false); 9430fdc8d8SChris Lattner return broadcaster; 9530fdc8d8SChris Lattner } 9630fdc8d8SChris Lattner 9730fdc8d8SChris Lattner bool 9830fdc8d8SChris Lattner SBEvent::BroadcasterMatchesPtr (const SBBroadcaster *broadcaster) 9930fdc8d8SChris Lattner { 10030fdc8d8SChris Lattner if (broadcaster) 10130fdc8d8SChris Lattner { 1026611103cSGreg Clayton Event *lldb_event = get(); 10330fdc8d8SChris Lattner if (lldb_event) 1046611103cSGreg Clayton return lldb_event->BroadcasterIs (broadcaster->get()); 10530fdc8d8SChris Lattner } 10630fdc8d8SChris Lattner return false; 10730fdc8d8SChris Lattner } 10830fdc8d8SChris Lattner 10930fdc8d8SChris Lattner bool 11030fdc8d8SChris Lattner SBEvent::BroadcasterMatchesRef (const SBBroadcaster &broadcaster) 11130fdc8d8SChris Lattner { 112ceb6b139SCaroline Tice Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 113ceb6b139SCaroline Tice 114ceb6b139SCaroline Tice if (log) 115ceb6b139SCaroline Tice log->Printf ("SBEvent::BroadcasterMatchesRef (broacaster) broadcaster = %p", &broadcaster); 116ceb6b139SCaroline Tice 1176611103cSGreg Clayton Event *lldb_event = get(); 118ceb6b139SCaroline Tice bool success = false; 11930fdc8d8SChris Lattner if (lldb_event) 120ceb6b139SCaroline Tice success = lldb_event->BroadcasterIs (broadcaster.get()); 121ceb6b139SCaroline Tice 122ceb6b139SCaroline Tice if (log) 123*750cd175SCaroline Tice log->Printf ("SBEvent::BroadcasterMathesRef (this.sp=%p, broadcaster.obj=%p) => %s", m_opaque, 124*750cd175SCaroline Tice broadcaster.get(), (success ? "true" : "false")); 125ceb6b139SCaroline Tice 126ceb6b139SCaroline Tice return success; 12730fdc8d8SChris Lattner } 12830fdc8d8SChris Lattner 12930fdc8d8SChris Lattner void 13030fdc8d8SChris Lattner SBEvent::Clear() 13130fdc8d8SChris Lattner { 1326611103cSGreg Clayton Event *lldb_event = get(); 13330fdc8d8SChris Lattner if (lldb_event) 13430fdc8d8SChris Lattner lldb_event->Clear(); 13530fdc8d8SChris Lattner } 13630fdc8d8SChris Lattner 13730fdc8d8SChris Lattner EventSP & 1386611103cSGreg Clayton SBEvent::GetSP () const 13930fdc8d8SChris Lattner { 14030fdc8d8SChris Lattner return m_event_sp; 14130fdc8d8SChris Lattner } 14230fdc8d8SChris Lattner 14330fdc8d8SChris Lattner Event * 1446611103cSGreg Clayton SBEvent::get() const 14530fdc8d8SChris Lattner { 14630fdc8d8SChris Lattner // There is a dangerous accessor call GetSharedPtr which can be used, so if 14730fdc8d8SChris Lattner // we have anything valid in m_event_sp, we must use that since if it gets 14830fdc8d8SChris Lattner // used by a function that puts something in there, then it won't update 1496611103cSGreg Clayton // m_opaque... 15030fdc8d8SChris Lattner if (m_event_sp) 1516611103cSGreg Clayton m_opaque = m_event_sp.get(); 15230fdc8d8SChris Lattner 1536611103cSGreg Clayton return m_opaque; 15430fdc8d8SChris Lattner } 15530fdc8d8SChris Lattner 15630fdc8d8SChris Lattner void 1576611103cSGreg Clayton SBEvent::reset (EventSP &event_sp) 15830fdc8d8SChris Lattner { 15930fdc8d8SChris Lattner m_event_sp = event_sp; 1606611103cSGreg Clayton m_opaque = m_event_sp.get(); 16130fdc8d8SChris Lattner } 16230fdc8d8SChris Lattner 16330fdc8d8SChris Lattner void 1646611103cSGreg Clayton SBEvent::reset (Event* event_ptr) 16530fdc8d8SChris Lattner { 1666611103cSGreg Clayton m_opaque = event_ptr; 16730fdc8d8SChris Lattner m_event_sp.reset(); 16830fdc8d8SChris Lattner } 16930fdc8d8SChris Lattner 17030fdc8d8SChris Lattner bool 17130fdc8d8SChris Lattner SBEvent::IsValid() const 17230fdc8d8SChris Lattner { 1736611103cSGreg Clayton // Do NOT use m_opaque directly!!! Must use the SBEvent::get() 1746611103cSGreg Clayton // accessor. See comments in SBEvent::get().... 1756611103cSGreg Clayton return SBEvent::get() != NULL; 17630fdc8d8SChris Lattner 17730fdc8d8SChris Lattner } 17830fdc8d8SChris Lattner 17930fdc8d8SChris Lattner const char * 18030fdc8d8SChris Lattner SBEvent::GetCStringFromEvent (const SBEvent &event) 18130fdc8d8SChris Lattner { 182ceb6b139SCaroline Tice Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 183ceb6b139SCaroline Tice 184ceb6b139SCaroline Tice if (log) 185*750cd175SCaroline Tice log->Printf ("GetCStringFromEvent (event.sp=%p) => %s", event.m_opaque, 186ceb6b139SCaroline Tice reinterpret_cast<const char *>(EventDataBytes::GetBytesFromEvent (event.get()))); 187ceb6b139SCaroline Tice 1886611103cSGreg Clayton return reinterpret_cast<const char *>(EventDataBytes::GetBytesFromEvent (event.get())); 18930fdc8d8SChris Lattner } 19030fdc8d8SChris Lattner 19130fdc8d8SChris Lattner 192dde9cff3SCaroline Tice bool 193dde9cff3SCaroline Tice SBEvent::GetDescription (SBStream &description) 194dde9cff3SCaroline Tice { 195dde9cff3SCaroline Tice if (m_opaque) 196dde9cff3SCaroline Tice { 197dac97f31SCaroline Tice description.ref(); 198dde9cff3SCaroline Tice m_opaque->Dump (description.get()); 199dde9cff3SCaroline Tice } 200dde9cff3SCaroline Tice else 201dde9cff3SCaroline Tice description.Printf ("No value"); 202dde9cff3SCaroline Tice 203dde9cff3SCaroline Tice return true; 204dde9cff3SCaroline Tice } 205ceb6b139SCaroline Tice 206ceb6b139SCaroline Tice bool 207ceb6b139SCaroline Tice SBEvent::GetDescription (SBStream &description) const 208ceb6b139SCaroline Tice { 209ceb6b139SCaroline Tice if (m_opaque) 210ceb6b139SCaroline Tice { 211ceb6b139SCaroline Tice description.ref(); 212ceb6b139SCaroline Tice m_opaque->Dump (description.get()); 213ceb6b139SCaroline Tice } 214ceb6b139SCaroline Tice else 215ceb6b139SCaroline Tice description.Printf ("No value"); 216ceb6b139SCaroline Tice 217ceb6b139SCaroline Tice return true; 218ceb6b139SCaroline Tice } 219