180814287SRaphael Isemann //===-- SBSymbolContextList.cpp -------------------------------------------===//
209960031SGreg Clayton //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
609960031SGreg Clayton //
709960031SGreg Clayton //===----------------------------------------------------------------------===//
809960031SGreg Clayton
909960031SGreg Clayton #include "lldb/API/SBSymbolContextList.h"
10bd4bf82aSJonas Devlieghere #include "Utils.h"
115569e64eSGreg Clayton #include "lldb/API/SBStream.h"
1209960031SGreg Clayton #include "lldb/Symbol/SymbolContext.h"
13*1755f5b1SJonas Devlieghere #include "lldb/Utility/Instrumentation.h"
1409960031SGreg Clayton
1509960031SGreg Clayton using namespace lldb;
1609960031SGreg Clayton using namespace lldb_private;
1709960031SGreg Clayton
SBSymbolContextList()18b9c1b51eSKate Stone SBSymbolContextList::SBSymbolContextList()
19baf5664fSJonas Devlieghere : m_opaque_up(new SymbolContextList()) {
20*1755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this);
21baf5664fSJonas Devlieghere }
2209960031SGreg Clayton
SBSymbolContextList(const SBSymbolContextList & rhs)23a3436f73SKazu Hirata SBSymbolContextList::SBSymbolContextList(const SBSymbolContextList &rhs) {
24*1755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this, rhs);
25bd4bf82aSJonas Devlieghere
26bd4bf82aSJonas Devlieghere m_opaque_up = clone(rhs.m_opaque_up);
27bd4bf82aSJonas Devlieghere }
2809960031SGreg Clayton
29866b7a65SJonas Devlieghere SBSymbolContextList::~SBSymbolContextList() = default;
3009960031SGreg Clayton
31b9c1b51eSKate Stone const SBSymbolContextList &SBSymbolContextList::
operator =(const SBSymbolContextList & rhs)32b9c1b51eSKate Stone operator=(const SBSymbolContextList &rhs) {
33*1755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this, rhs);
34baf5664fSJonas Devlieghere
35bd4bf82aSJonas Devlieghere if (this != &rhs)
36bd4bf82aSJonas Devlieghere m_opaque_up = clone(rhs.m_opaque_up);
37d232abc3SJonas Devlieghere return *this;
3809960031SGreg Clayton }
3909960031SGreg Clayton
GetSize() const40b9c1b51eSKate Stone uint32_t SBSymbolContextList::GetSize() const {
41*1755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this);
42baf5664fSJonas Devlieghere
43d5b44036SJonas Devlieghere if (m_opaque_up)
44d5b44036SJonas Devlieghere return m_opaque_up->GetSize();
4509960031SGreg Clayton return 0;
4609960031SGreg Clayton }
4709960031SGreg Clayton
GetContextAtIndex(uint32_t idx)48b9c1b51eSKate Stone SBSymbolContext SBSymbolContextList::GetContextAtIndex(uint32_t idx) {
49*1755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this, idx);
50baf5664fSJonas Devlieghere
5109960031SGreg Clayton SBSymbolContext sb_sc;
52d5b44036SJonas Devlieghere if (m_opaque_up) {
5309960031SGreg Clayton SymbolContext sc;
542efc6892SPavel Labath if (m_opaque_up->GetContextAtIndex(idx, sc))
552efc6892SPavel Labath sb_sc = sc;
5609960031SGreg Clayton }
57d232abc3SJonas Devlieghere return sb_sc;
5809960031SGreg Clayton }
5909960031SGreg Clayton
Clear()60b9c1b51eSKate Stone void SBSymbolContextList::Clear() {
61*1755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this);
62baf5664fSJonas Devlieghere
63d5b44036SJonas Devlieghere if (m_opaque_up)
64d5b44036SJonas Devlieghere m_opaque_up->Clear();
65fe356d35SGreg Clayton }
66fe356d35SGreg Clayton
Append(SBSymbolContext & sc)67b9c1b51eSKate Stone void SBSymbolContextList::Append(SBSymbolContext &sc) {
68*1755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this, sc);
69baf5664fSJonas Devlieghere
70d5b44036SJonas Devlieghere if (sc.IsValid() && m_opaque_up.get())
71d5b44036SJonas Devlieghere m_opaque_up->Append(*sc);
725569e64eSGreg Clayton }
735569e64eSGreg Clayton
Append(SBSymbolContextList & sc_list)74b9c1b51eSKate Stone void SBSymbolContextList::Append(SBSymbolContextList &sc_list) {
75*1755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this, sc_list);
76baf5664fSJonas Devlieghere
77d5b44036SJonas Devlieghere if (sc_list.IsValid() && m_opaque_up.get())
78d5b44036SJonas Devlieghere m_opaque_up->Append(*sc_list);
795569e64eSGreg Clayton }
805569e64eSGreg Clayton
IsValid() const81baf5664fSJonas Devlieghere bool SBSymbolContextList::IsValid() const {
82*1755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this);
837f5237bcSPavel Labath return this->operator bool();
847f5237bcSPavel Labath }
operator bool() const857f5237bcSPavel Labath SBSymbolContextList::operator bool() const {
86*1755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this);
87baf5664fSJonas Devlieghere
88248a1305SKonrad Kleine return m_opaque_up != nullptr;
89baf5664fSJonas Devlieghere }
9009960031SGreg Clayton
operator ->() const91b9c1b51eSKate Stone lldb_private::SymbolContextList *SBSymbolContextList::operator->() const {
92d5b44036SJonas Devlieghere return m_opaque_up.get();
9309960031SGreg Clayton }
9409960031SGreg Clayton
operator *() const95b9c1b51eSKate Stone lldb_private::SymbolContextList &SBSymbolContextList::operator*() const {
96d5b44036SJonas Devlieghere assert(m_opaque_up.get());
97d5b44036SJonas Devlieghere return *m_opaque_up;
9809960031SGreg Clayton }
9909960031SGreg Clayton
GetDescription(lldb::SBStream & description)100b9c1b51eSKate Stone bool SBSymbolContextList::GetDescription(lldb::SBStream &description) {
101*1755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this, description);
102baf5664fSJonas Devlieghere
1035569e64eSGreg Clayton Stream &strm = description.ref();
104d5b44036SJonas Devlieghere if (m_opaque_up)
105248a1305SKonrad Kleine m_opaque_up->GetDescription(&strm, lldb::eDescriptionLevelFull, nullptr);
1065569e64eSGreg Clayton return true;
1075569e64eSGreg Clayton }
108