| //===----------------------------------------------------------------------===// |
| // |
| // 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; |
| } |