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" 12*dde9cff3SCaroline 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 { 3630fdc8d8SChris Lattner } 3730fdc8d8SChris Lattner 3830fdc8d8SChris Lattner SBEvent::SBEvent (EventSP &event_sp) : 3930fdc8d8SChris Lattner m_event_sp (event_sp), 406611103cSGreg Clayton m_opaque (event_sp.get()) 4130fdc8d8SChris Lattner { 4230fdc8d8SChris Lattner } 4330fdc8d8SChris Lattner 4430fdc8d8SChris Lattner SBEvent::~SBEvent() 4530fdc8d8SChris Lattner { 4630fdc8d8SChris Lattner } 4730fdc8d8SChris Lattner 4830fdc8d8SChris Lattner const char * 4930fdc8d8SChris Lattner SBEvent::GetDataFlavor () 5030fdc8d8SChris Lattner { 516611103cSGreg Clayton Event *lldb_event = get(); 5230fdc8d8SChris Lattner if (lldb_event) 5330fdc8d8SChris Lattner return lldb_event->GetData()->GetFlavor().AsCString(); 5430fdc8d8SChris Lattner return NULL; 5530fdc8d8SChris Lattner } 5630fdc8d8SChris Lattner 5730fdc8d8SChris Lattner uint32_t 5830fdc8d8SChris Lattner SBEvent::GetType () const 5930fdc8d8SChris Lattner { 606611103cSGreg Clayton const Event *lldb_event = get(); 6130fdc8d8SChris Lattner if (lldb_event) 6230fdc8d8SChris Lattner return lldb_event->GetType(); 6330fdc8d8SChris Lattner return 0; 6430fdc8d8SChris Lattner } 6530fdc8d8SChris Lattner 6630fdc8d8SChris Lattner SBBroadcaster 6730fdc8d8SChris Lattner SBEvent::GetBroadcaster () const 6830fdc8d8SChris Lattner { 6930fdc8d8SChris Lattner SBBroadcaster broadcaster; 706611103cSGreg Clayton const Event *lldb_event = get(); 7130fdc8d8SChris Lattner if (lldb_event) 726611103cSGreg Clayton broadcaster.reset (lldb_event->GetBroadcaster(), false); 7330fdc8d8SChris Lattner return broadcaster; 7430fdc8d8SChris Lattner } 7530fdc8d8SChris Lattner 7630fdc8d8SChris Lattner bool 7730fdc8d8SChris Lattner SBEvent::BroadcasterMatchesPtr (const SBBroadcaster *broadcaster) 7830fdc8d8SChris Lattner { 7930fdc8d8SChris Lattner if (broadcaster) 8030fdc8d8SChris Lattner { 816611103cSGreg Clayton Event *lldb_event = get(); 8230fdc8d8SChris Lattner if (lldb_event) 836611103cSGreg Clayton return lldb_event->BroadcasterIs (broadcaster->get()); 8430fdc8d8SChris Lattner } 8530fdc8d8SChris Lattner return false; 8630fdc8d8SChris Lattner } 8730fdc8d8SChris Lattner 8830fdc8d8SChris Lattner bool 8930fdc8d8SChris Lattner SBEvent::BroadcasterMatchesRef (const SBBroadcaster &broadcaster) 9030fdc8d8SChris Lattner { 916611103cSGreg Clayton Event *lldb_event = get(); 9230fdc8d8SChris Lattner if (lldb_event) 936611103cSGreg Clayton return lldb_event->BroadcasterIs (broadcaster.get()); 9430fdc8d8SChris Lattner return false; 9530fdc8d8SChris Lattner } 9630fdc8d8SChris Lattner 9730fdc8d8SChris Lattner void 9830fdc8d8SChris Lattner SBEvent::Clear() 9930fdc8d8SChris Lattner { 1006611103cSGreg Clayton Event *lldb_event = get(); 10130fdc8d8SChris Lattner if (lldb_event) 10230fdc8d8SChris Lattner lldb_event->Clear(); 10330fdc8d8SChris Lattner } 10430fdc8d8SChris Lattner 10530fdc8d8SChris Lattner EventSP & 1066611103cSGreg Clayton SBEvent::GetSP () const 10730fdc8d8SChris Lattner { 10830fdc8d8SChris Lattner return m_event_sp; 10930fdc8d8SChris Lattner } 11030fdc8d8SChris Lattner 11130fdc8d8SChris Lattner Event * 1126611103cSGreg Clayton SBEvent::get() const 11330fdc8d8SChris Lattner { 11430fdc8d8SChris Lattner // There is a dangerous accessor call GetSharedPtr which can be used, so if 11530fdc8d8SChris Lattner // we have anything valid in m_event_sp, we must use that since if it gets 11630fdc8d8SChris Lattner // used by a function that puts something in there, then it won't update 1176611103cSGreg Clayton // m_opaque... 11830fdc8d8SChris Lattner if (m_event_sp) 1196611103cSGreg Clayton m_opaque = m_event_sp.get(); 12030fdc8d8SChris Lattner 1216611103cSGreg Clayton return m_opaque; 12230fdc8d8SChris Lattner } 12330fdc8d8SChris Lattner 12430fdc8d8SChris Lattner void 1256611103cSGreg Clayton SBEvent::reset (EventSP &event_sp) 12630fdc8d8SChris Lattner { 12730fdc8d8SChris Lattner m_event_sp = event_sp; 1286611103cSGreg Clayton m_opaque = m_event_sp.get(); 12930fdc8d8SChris Lattner } 13030fdc8d8SChris Lattner 13130fdc8d8SChris Lattner void 1326611103cSGreg Clayton SBEvent::reset (Event* event_ptr) 13330fdc8d8SChris Lattner { 1346611103cSGreg Clayton m_opaque = event_ptr; 13530fdc8d8SChris Lattner m_event_sp.reset(); 13630fdc8d8SChris Lattner } 13730fdc8d8SChris Lattner 13830fdc8d8SChris Lattner bool 13930fdc8d8SChris Lattner SBEvent::IsValid() const 14030fdc8d8SChris Lattner { 1416611103cSGreg Clayton // Do NOT use m_opaque directly!!! Must use the SBEvent::get() 1426611103cSGreg Clayton // accessor. See comments in SBEvent::get().... 1436611103cSGreg Clayton return SBEvent::get() != NULL; 14430fdc8d8SChris Lattner 14530fdc8d8SChris Lattner } 14630fdc8d8SChris Lattner 14730fdc8d8SChris Lattner const char * 14830fdc8d8SChris Lattner SBEvent::GetCStringFromEvent (const SBEvent &event) 14930fdc8d8SChris Lattner { 1506611103cSGreg Clayton return reinterpret_cast<const char *>(EventDataBytes::GetBytesFromEvent (event.get())); 15130fdc8d8SChris Lattner } 15230fdc8d8SChris Lattner 15330fdc8d8SChris Lattner 154*dde9cff3SCaroline Tice bool 155*dde9cff3SCaroline Tice SBEvent::GetDescription (SBStream &description) 156*dde9cff3SCaroline Tice { 157*dde9cff3SCaroline Tice if (m_opaque) 158*dde9cff3SCaroline Tice { 159*dde9cff3SCaroline Tice m_opaque->Dump (description.get()); 160*dde9cff3SCaroline Tice } 161*dde9cff3SCaroline Tice else 162*dde9cff3SCaroline Tice description.Printf ("No value"); 163*dde9cff3SCaroline Tice 164*dde9cff3SCaroline Tice return true; 165*dde9cff3SCaroline Tice } 166*dde9cff3SCaroline Tice 167*dde9cff3SCaroline Tice PyObject * 168*dde9cff3SCaroline Tice SBEvent::__repr__ () 169*dde9cff3SCaroline Tice { 170*dde9cff3SCaroline Tice SBStream description; 171*dde9cff3SCaroline Tice description.ref(); 172*dde9cff3SCaroline Tice GetDescription (description); 173*dde9cff3SCaroline Tice return PyString_FromString (description.GetData()); 174*dde9cff3SCaroline Tice } 175