| //===----------------------------------------------------------------------===// | |
| // | |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | |
| // See https://llvm.org/LICENSE.txt for license information. | |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception. | |
| // | |
| //===----------------------------------------------------------------------===// | |
| #include "lldb/API/SBFrameList.h" | |
| #include "lldb/API/SBFrame.h" | |
| #include "lldb/API/SBStream.h" | |
| #include "lldb/API/SBThread.h" | |
| #include "lldb/Target/StackFrameList.h" | |
| #include "lldb/Target/Thread.h" | |
| #include "lldb/Utility/Instrumentation.h" | |
| using namespace lldb; | |
| using namespace lldb_private; | |
| SBFrameList::SBFrameList() : m_opaque_sp() { LLDB_INSTRUMENT_VA(this); } | |
| SBFrameList::SBFrameList(const SBFrameList &rhs) | |
| : m_opaque_sp(rhs.m_opaque_sp) { | |
| LLDB_INSTRUMENT_VA(this, rhs); | |
| } | |
| SBFrameList::~SBFrameList() = default; | |
| const SBFrameList &SBFrameList::operator=(const SBFrameList &rhs) { | |
| LLDB_INSTRUMENT_VA(this, rhs); | |
| if (this != &rhs) | |
| m_opaque_sp = rhs.m_opaque_sp; | |
| return *this; | |
| } | |
| SBFrameList::SBFrameList(const lldb::StackFrameListSP &frame_list_sp) | |
| : m_opaque_sp(frame_list_sp) {} | |
| void SBFrameList::SetFrameList(const lldb::StackFrameListSP &frame_list_sp) { | |
| m_opaque_sp = frame_list_sp; | |
| } | |
| SBFrameList::operator bool() const { | |
| LLDB_INSTRUMENT_VA(this); | |
| return m_opaque_sp.get() != nullptr; | |
| } | |
| bool SBFrameList::IsValid() const { | |
| LLDB_INSTRUMENT_VA(this); | |
| return this->operator bool(); | |
| } | |
| uint32_t SBFrameList::GetSize() const { | |
| LLDB_INSTRUMENT_VA(this); | |
| if (m_opaque_sp) | |
| return m_opaque_sp->GetNumFrames(); | |
| return 0; | |
| } | |
| SBFrame SBFrameList::GetFrameAtIndex(uint32_t idx) const { | |
| LLDB_INSTRUMENT_VA(this, idx); | |
| SBFrame sb_frame; | |
| if (m_opaque_sp) | |
| sb_frame.SetFrameSP(m_opaque_sp->GetFrameAtIndex(idx)); | |
| return sb_frame; | |
| } | |
| SBThread SBFrameList::GetThread() const { | |
| LLDB_INSTRUMENT_VA(this); | |
| SBThread sb_thread; | |
| if (m_opaque_sp) | |
| sb_thread.SetThread(m_opaque_sp->GetThread().shared_from_this()); | |
| return sb_thread; | |
| } | |
| void SBFrameList::Clear() { | |
| LLDB_INSTRUMENT_VA(this); | |
| if (m_opaque_sp) | |
| m_opaque_sp->Clear(); | |
| } | |
| bool SBFrameList::GetDescription(SBStream &description) const { | |
| LLDB_INSTRUMENT_VA(this, description); | |
| if (!m_opaque_sp) | |
| return false; | |
| Stream &strm = description.ref(); | |
| m_opaque_sp->Dump(&strm); | |
| return true; | |
| } |