180814287SRaphael Isemann //===-- SBTypeNameSpecifier.cpp -------------------------------------------===//
2061858ceSEnrico Granata //
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
6061858ceSEnrico Granata //
7061858ceSEnrico Granata //===----------------------------------------------------------------------===//
8061858ceSEnrico Granata 
9061858ceSEnrico Granata #include "lldb/API/SBTypeNameSpecifier.h"
10*1755f5b1SJonas Devlieghere #include "lldb/Utility/Instrumentation.h"
11061858ceSEnrico Granata 
12061858ceSEnrico Granata #include "lldb/API/SBStream.h"
13864e3e84SEnrico Granata #include "lldb/API/SBType.h"
14061858ceSEnrico Granata 
155548cb50SEnrico Granata #include "lldb/DataFormatters/DataVisualization.h"
16061858ceSEnrico Granata 
17061858ceSEnrico Granata using namespace lldb;
18061858ceSEnrico Granata using namespace lldb_private;
19061858ceSEnrico Granata 
SBTypeNameSpecifier()20*1755f5b1SJonas Devlieghere SBTypeNameSpecifier::SBTypeNameSpecifier() { LLDB_INSTRUMENT_VA(this); }
21061858ceSEnrico Granata 
SBTypeNameSpecifier(const char * name,bool is_regex)22b9c1b51eSKate Stone SBTypeNameSpecifier::SBTypeNameSpecifier(const char *name, bool is_regex)
23b9c1b51eSKate Stone     : m_opaque_sp(new TypeNameSpecifierImpl(name, is_regex)) {
24*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this, name, is_regex);
25baf5664fSJonas Devlieghere 
26248a1305SKonrad Kleine   if (name == nullptr || (*name) == 0)
27061858ceSEnrico Granata     m_opaque_sp.reset();
28061858ceSEnrico Granata }
29061858ceSEnrico Granata 
SBTypeNameSpecifier(SBType type)30a3436f73SKazu Hirata SBTypeNameSpecifier::SBTypeNameSpecifier(SBType type) {
31*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this, type);
32baf5664fSJonas Devlieghere 
33864e3e84SEnrico Granata   if (type.IsValid())
34b9c1b51eSKate Stone     m_opaque_sp = TypeNameSpecifierImplSP(
35b9c1b51eSKate Stone         new TypeNameSpecifierImpl(type.m_opaque_sp->GetCompilerType(true)));
36864e3e84SEnrico Granata }
37864e3e84SEnrico Granata 
SBTypeNameSpecifier(const lldb::SBTypeNameSpecifier & rhs)38b9c1b51eSKate Stone SBTypeNameSpecifier::SBTypeNameSpecifier(const lldb::SBTypeNameSpecifier &rhs)
39baf5664fSJonas Devlieghere     : m_opaque_sp(rhs.m_opaque_sp) {
40*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this, rhs);
41baf5664fSJonas Devlieghere }
42061858ceSEnrico Granata 
43866b7a65SJonas Devlieghere SBTypeNameSpecifier::~SBTypeNameSpecifier() = default;
44061858ceSEnrico Granata 
IsValid() const45baf5664fSJonas Devlieghere bool SBTypeNameSpecifier::IsValid() const {
46*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this);
477f5237bcSPavel Labath   return this->operator bool();
487f5237bcSPavel Labath }
operator bool() const497f5237bcSPavel Labath SBTypeNameSpecifier::operator bool() const {
50*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this);
51baf5664fSJonas Devlieghere 
52248a1305SKonrad Kleine   return m_opaque_sp.get() != nullptr;
53baf5664fSJonas Devlieghere }
54061858ceSEnrico Granata 
GetName()55b9c1b51eSKate Stone const char *SBTypeNameSpecifier::GetName() {
56*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this);
57baf5664fSJonas Devlieghere 
58061858ceSEnrico Granata   if (!IsValid())
59248a1305SKonrad Kleine     return nullptr;
60061858ceSEnrico Granata 
61061858ceSEnrico Granata   return m_opaque_sp->GetName();
62061858ceSEnrico Granata }
63061858ceSEnrico Granata 
GetType()64b9c1b51eSKate Stone SBType SBTypeNameSpecifier::GetType() {
65*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this);
66baf5664fSJonas Devlieghere 
67864e3e84SEnrico Granata   if (!IsValid())
68d232abc3SJonas Devlieghere     return SBType();
69a1e5dc86SGreg Clayton   lldb_private::CompilerType c_type = m_opaque_sp->GetCompilerType();
70864e3e84SEnrico Granata   if (c_type.IsValid())
71d232abc3SJonas Devlieghere     return SBType(c_type);
72d232abc3SJonas Devlieghere   return SBType();
73864e3e84SEnrico Granata }
74864e3e84SEnrico Granata 
IsRegex()75b9c1b51eSKate Stone bool SBTypeNameSpecifier::IsRegex() {
76*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this);
77baf5664fSJonas Devlieghere 
78061858ceSEnrico Granata   if (!IsValid())
79061858ceSEnrico Granata     return false;
80061858ceSEnrico Granata 
81061858ceSEnrico Granata   return m_opaque_sp->IsRegex();
82061858ceSEnrico Granata }
83061858ceSEnrico Granata 
GetDescription(lldb::SBStream & description,lldb::DescriptionLevel description_level)84b9c1b51eSKate Stone bool SBTypeNameSpecifier::GetDescription(
85b9c1b51eSKate Stone     lldb::SBStream &description, lldb::DescriptionLevel description_level) {
86*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this, description, description_level);
87baf5664fSJonas Devlieghere 
88061858ceSEnrico Granata   if (!IsValid())
89061858ceSEnrico Granata     return false;
90b9c1b51eSKate Stone   description.Printf("SBTypeNameSpecifier(%s,%s)", GetName(),
91b9c1b51eSKate Stone                      IsRegex() ? "regex" : "plain");
92061858ceSEnrico Granata   return true;
93061858ceSEnrico Granata }
94061858ceSEnrico Granata 
95b9c1b51eSKate Stone lldb::SBTypeNameSpecifier &SBTypeNameSpecifier::
operator =(const lldb::SBTypeNameSpecifier & rhs)96b9c1b51eSKate Stone operator=(const lldb::SBTypeNameSpecifier &rhs) {
97*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this, rhs);
98baf5664fSJonas Devlieghere 
99b9c1b51eSKate Stone   if (this != &rhs) {
100061858ceSEnrico Granata     m_opaque_sp = rhs.m_opaque_sp;
101061858ceSEnrico Granata   }
102d232abc3SJonas Devlieghere   return *this;
103061858ceSEnrico Granata }
104061858ceSEnrico Granata 
operator ==(lldb::SBTypeNameSpecifier & rhs)105b9c1b51eSKate Stone bool SBTypeNameSpecifier::operator==(lldb::SBTypeNameSpecifier &rhs) {
106*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this, rhs);
107baf5664fSJonas Devlieghere 
108a6682a41SJonas Devlieghere   if (!IsValid())
109061858ceSEnrico Granata     return !rhs.IsValid();
110061858ceSEnrico Granata   return m_opaque_sp == rhs.m_opaque_sp;
111061858ceSEnrico Granata }
112061858ceSEnrico Granata 
IsEqualTo(lldb::SBTypeNameSpecifier & rhs)113b9c1b51eSKate Stone bool SBTypeNameSpecifier::IsEqualTo(lldb::SBTypeNameSpecifier &rhs) {
114*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this, rhs);
115baf5664fSJonas Devlieghere 
116a6682a41SJonas Devlieghere   if (!IsValid())
117061858ceSEnrico Granata     return !rhs.IsValid();
118061858ceSEnrico Granata 
119061858ceSEnrico Granata   if (IsRegex() != rhs.IsRegex())
120061858ceSEnrico Granata     return false;
121248a1305SKonrad Kleine   if (GetName() == nullptr || rhs.GetName() == nullptr)
12228eb5711SJim Ingham     return false;
123061858ceSEnrico Granata 
124061858ceSEnrico Granata   return (strcmp(GetName(), rhs.GetName()) == 0);
125061858ceSEnrico Granata }
126061858ceSEnrico Granata 
operator !=(lldb::SBTypeNameSpecifier & rhs)127b9c1b51eSKate Stone bool SBTypeNameSpecifier::operator!=(lldb::SBTypeNameSpecifier &rhs) {
128*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this, rhs);
129baf5664fSJonas Devlieghere 
130a6682a41SJonas Devlieghere   if (!IsValid())
131061858ceSEnrico Granata     return !rhs.IsValid();
132061858ceSEnrico Granata   return m_opaque_sp != rhs.m_opaque_sp;
133061858ceSEnrico Granata }
134061858ceSEnrico Granata 
GetSP()135b9c1b51eSKate Stone lldb::TypeNameSpecifierImplSP SBTypeNameSpecifier::GetSP() {
136061858ceSEnrico Granata   return m_opaque_sp;
137061858ceSEnrico Granata }
138061858ceSEnrico Granata 
SetSP(const lldb::TypeNameSpecifierImplSP & type_namespec_sp)139b9c1b51eSKate Stone void SBTypeNameSpecifier::SetSP(
140b9c1b51eSKate Stone     const lldb::TypeNameSpecifierImplSP &type_namespec_sp) {
141061858ceSEnrico Granata   m_opaque_sp = type_namespec_sp;
142061858ceSEnrico Granata }
143061858ceSEnrico Granata 
SBTypeNameSpecifier(const lldb::TypeNameSpecifierImplSP & type_namespec_sp)144b9c1b51eSKate Stone SBTypeNameSpecifier::SBTypeNameSpecifier(
145b9c1b51eSKate Stone     const lldb::TypeNameSpecifierImplSP &type_namespec_sp)
146b9c1b51eSKate Stone     : m_opaque_sp(type_namespec_sp) {}
147