180814287SRaphael Isemann //===-- SBTypeEnumMember.cpp ----------------------------------------------===//
2732215f9STodd Fiala //
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
6732215f9STodd Fiala //
7732215f9STodd Fiala //===----------------------------------------------------------------------===//
8732215f9STodd Fiala
9bf9a7730SZachary Turner #include "lldb/API/SBTypeEnumMember.h"
10bd4bf82aSJonas Devlieghere #include "Utils.h"
11b9c1b51eSKate Stone #include "lldb/API/SBDefines.h"
12732215f9STodd Fiala #include "lldb/API/SBStream.h"
13bf9a7730SZachary Turner #include "lldb/API/SBType.h"
14a1e5dc86SGreg Clayton #include "lldb/Symbol/CompilerType.h"
15732215f9STodd Fiala #include "lldb/Symbol/Type.h"
16*1755f5b1SJonas Devlieghere #include "lldb/Utility/Instrumentation.h"
17bf9a7730SZachary Turner #include "lldb/Utility/Stream.h"
18732215f9STodd Fiala
19796ac80bSJonas Devlieghere #include <memory>
20796ac80bSJonas Devlieghere
21732215f9STodd Fiala using namespace lldb;
22732215f9STodd Fiala using namespace lldb_private;
23732215f9STodd Fiala
SBTypeEnumMember()24*1755f5b1SJonas Devlieghere SBTypeEnumMember::SBTypeEnumMember() { LLDB_INSTRUMENT_VA(this); }
25732215f9STodd Fiala
26866b7a65SJonas Devlieghere SBTypeEnumMember::~SBTypeEnumMember() = default;
27bd4bf82aSJonas Devlieghere
SBTypeEnumMember(const lldb::TypeEnumMemberImplSP & enum_member_sp)28b9c1b51eSKate Stone SBTypeEnumMember::SBTypeEnumMember(
29b9c1b51eSKate Stone const lldb::TypeEnumMemberImplSP &enum_member_sp)
30b9c1b51eSKate Stone : m_opaque_sp(enum_member_sp) {}
31732215f9STodd Fiala
SBTypeEnumMember(const SBTypeEnumMember & rhs)32a3436f73SKazu Hirata SBTypeEnumMember::SBTypeEnumMember(const SBTypeEnumMember &rhs) {
33*1755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this, rhs);
34baf5664fSJonas Devlieghere
35bd4bf82aSJonas Devlieghere m_opaque_sp = clone(rhs.m_opaque_sp);
36732215f9STodd Fiala }
37732215f9STodd Fiala
operator =(const SBTypeEnumMember & rhs)38b9c1b51eSKate Stone SBTypeEnumMember &SBTypeEnumMember::operator=(const SBTypeEnumMember &rhs) {
39*1755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this, rhs);
40baf5664fSJonas Devlieghere
41bd4bf82aSJonas Devlieghere if (this != &rhs)
42bd4bf82aSJonas Devlieghere m_opaque_sp = clone(rhs.m_opaque_sp);
43d232abc3SJonas Devlieghere return *this;
44732215f9STodd Fiala }
45732215f9STodd Fiala
IsValid() const46baf5664fSJonas Devlieghere bool SBTypeEnumMember::IsValid() const {
47*1755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this);
487f5237bcSPavel Labath return this->operator bool();
497f5237bcSPavel Labath }
operator bool() const507f5237bcSPavel Labath SBTypeEnumMember::operator bool() const {
51*1755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this);
52baf5664fSJonas Devlieghere
53baf5664fSJonas Devlieghere return m_opaque_sp.get();
54baf5664fSJonas Devlieghere }
55732215f9STodd Fiala
GetName()56b9c1b51eSKate Stone const char *SBTypeEnumMember::GetName() {
57*1755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this);
58baf5664fSJonas Devlieghere
59732215f9STodd Fiala if (m_opaque_sp.get())
60732215f9STodd Fiala return m_opaque_sp->GetName().GetCString();
61248a1305SKonrad Kleine return nullptr;
62732215f9STodd Fiala }
63732215f9STodd Fiala
GetValueAsSigned()64b9c1b51eSKate Stone int64_t SBTypeEnumMember::GetValueAsSigned() {
65*1755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this);
66baf5664fSJonas Devlieghere
67732215f9STodd Fiala if (m_opaque_sp.get())
68732215f9STodd Fiala return m_opaque_sp->GetValueAsSigned();
69732215f9STodd Fiala return 0;
70732215f9STodd Fiala }
71732215f9STodd Fiala
GetValueAsUnsigned()72b9c1b51eSKate Stone uint64_t SBTypeEnumMember::GetValueAsUnsigned() {
73*1755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this);
74baf5664fSJonas Devlieghere
75732215f9STodd Fiala if (m_opaque_sp.get())
76732215f9STodd Fiala return m_opaque_sp->GetValueAsUnsigned();
77732215f9STodd Fiala return 0;
78732215f9STodd Fiala }
79732215f9STodd Fiala
GetType()80b9c1b51eSKate Stone SBType SBTypeEnumMember::GetType() {
81*1755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this);
82baf5664fSJonas Devlieghere
83732215f9STodd Fiala SBType sb_type;
84b9c1b51eSKate Stone if (m_opaque_sp.get()) {
85732215f9STodd Fiala sb_type.SetSP(m_opaque_sp->GetIntegerType());
86732215f9STodd Fiala }
87d232abc3SJonas Devlieghere return sb_type;
88732215f9STodd Fiala }
89732215f9STodd Fiala
reset(TypeEnumMemberImpl * type_member_impl)90b9c1b51eSKate Stone void SBTypeEnumMember::reset(TypeEnumMemberImpl *type_member_impl) {
91732215f9STodd Fiala m_opaque_sp.reset(type_member_impl);
92732215f9STodd Fiala }
93732215f9STodd Fiala
ref()94b9c1b51eSKate Stone TypeEnumMemberImpl &SBTypeEnumMember::ref() {
95248a1305SKonrad Kleine if (m_opaque_sp.get() == nullptr)
96796ac80bSJonas Devlieghere m_opaque_sp = std::make_shared<TypeEnumMemberImpl>();
97732215f9STodd Fiala return *m_opaque_sp.get();
98732215f9STodd Fiala }
99732215f9STodd Fiala
ref() const100b9c1b51eSKate Stone const TypeEnumMemberImpl &SBTypeEnumMember::ref() const {
101732215f9STodd Fiala return *m_opaque_sp.get();
102732215f9STodd Fiala }
103732215f9STodd Fiala
SBTypeEnumMemberList()104b9c1b51eSKate Stone SBTypeEnumMemberList::SBTypeEnumMemberList()
105baf5664fSJonas Devlieghere : m_opaque_up(new TypeEnumMemberListImpl()) {
106*1755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this);
107baf5664fSJonas Devlieghere }
108732215f9STodd Fiala
SBTypeEnumMemberList(const SBTypeEnumMemberList & rhs)109b9c1b51eSKate Stone SBTypeEnumMemberList::SBTypeEnumMemberList(const SBTypeEnumMemberList &rhs)
110d5b44036SJonas Devlieghere : m_opaque_up(new TypeEnumMemberListImpl()) {
111*1755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this, rhs);
112baf5664fSJonas Devlieghere
113b9c1b51eSKate Stone for (uint32_t i = 0,
114b9c1b51eSKate Stone rhs_size = const_cast<SBTypeEnumMemberList &>(rhs).GetSize();
115b9c1b51eSKate Stone i < rhs_size; i++)
116732215f9STodd Fiala Append(const_cast<SBTypeEnumMemberList &>(rhs).GetTypeEnumMemberAtIndex(i));
117732215f9STodd Fiala }
118732215f9STodd Fiala
IsValid()119baf5664fSJonas Devlieghere bool SBTypeEnumMemberList::IsValid() {
120*1755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this);
1217f5237bcSPavel Labath return this->operator bool();
1227f5237bcSPavel Labath }
operator bool() const1237f5237bcSPavel Labath SBTypeEnumMemberList::operator bool() const {
124*1755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this);
125baf5664fSJonas Devlieghere
126248a1305SKonrad Kleine return (m_opaque_up != nullptr);
127baf5664fSJonas Devlieghere }
128732215f9STodd Fiala
129b9c1b51eSKate Stone SBTypeEnumMemberList &SBTypeEnumMemberList::
operator =(const SBTypeEnumMemberList & rhs)130b9c1b51eSKate Stone operator=(const SBTypeEnumMemberList &rhs) {
131*1755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this, rhs);
132baf5664fSJonas Devlieghere
133b9c1b51eSKate Stone if (this != &rhs) {
1341c0bbe43SJonas Devlieghere m_opaque_up = std::make_unique<TypeEnumMemberListImpl>();
135b9c1b51eSKate Stone for (uint32_t i = 0,
136b9c1b51eSKate Stone rhs_size = const_cast<SBTypeEnumMemberList &>(rhs).GetSize();
137b9c1b51eSKate Stone i < rhs_size; i++)
138b9c1b51eSKate Stone Append(
139b9c1b51eSKate Stone const_cast<SBTypeEnumMemberList &>(rhs).GetTypeEnumMemberAtIndex(i));
140732215f9STodd Fiala }
141d232abc3SJonas Devlieghere return *this;
142732215f9STodd Fiala }
143732215f9STodd Fiala
Append(SBTypeEnumMember enum_member)144b9c1b51eSKate Stone void SBTypeEnumMemberList::Append(SBTypeEnumMember enum_member) {
145*1755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this, enum_member);
146baf5664fSJonas Devlieghere
147732215f9STodd Fiala if (enum_member.IsValid())
148d5b44036SJonas Devlieghere m_opaque_up->Append(enum_member.m_opaque_sp);
149732215f9STodd Fiala }
150732215f9STodd Fiala
151732215f9STodd Fiala SBTypeEnumMember
GetTypeEnumMemberAtIndex(uint32_t index)152b9c1b51eSKate Stone SBTypeEnumMemberList::GetTypeEnumMemberAtIndex(uint32_t index) {
153*1755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this, index);
154baf5664fSJonas Devlieghere
155d5b44036SJonas Devlieghere if (m_opaque_up)
156d232abc3SJonas Devlieghere return SBTypeEnumMember(m_opaque_up->GetTypeEnumMemberAtIndex(index));
157d232abc3SJonas Devlieghere return SBTypeEnumMember();
158732215f9STodd Fiala }
159732215f9STodd Fiala
GetSize()160baf5664fSJonas Devlieghere uint32_t SBTypeEnumMemberList::GetSize() {
161*1755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this);
162baf5664fSJonas Devlieghere
163baf5664fSJonas Devlieghere return m_opaque_up->GetSize();
164baf5664fSJonas Devlieghere }
165732215f9STodd Fiala
166866b7a65SJonas Devlieghere SBTypeEnumMemberList::~SBTypeEnumMemberList() = default;
167732215f9STodd Fiala
GetDescription(lldb::SBStream & description,lldb::DescriptionLevel description_level)168b9c1b51eSKate Stone bool SBTypeEnumMember::GetDescription(
169b9c1b51eSKate Stone lldb::SBStream &description, lldb::DescriptionLevel description_level) {
170*1755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this, description, description_level);
171baf5664fSJonas Devlieghere
172732215f9STodd Fiala Stream &strm = description.ref();
173732215f9STodd Fiala
174b9c1b51eSKate Stone if (m_opaque_sp.get()) {
175b9c1b51eSKate Stone if (m_opaque_sp->GetIntegerType()->GetDescription(strm,
176b9c1b51eSKate Stone description_level)) {
177732215f9STodd Fiala strm.Printf(" %s", m_opaque_sp->GetName().GetCString());
178732215f9STodd Fiala }
179b9c1b51eSKate Stone } else {
180732215f9STodd Fiala strm.PutCString("No value");
181732215f9STodd Fiala }
182732215f9STodd Fiala return true;
183732215f9STodd Fiala }
184