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