LLDB mainline
SBTypeSynthetic.cpp
Go to the documentation of this file.
1//===-- SBTypeSynthetic.cpp -----------------------------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
11
12#include "lldb/API/SBStream.h"
13
15
16using namespace lldb;
17using namespace lldb_private;
18
20
22 uint32_t options) {
23 LLDB_INSTRUMENT_VA(data, options);
24
25 if (!data || data[0] == 0)
26 return SBTypeSynthetic();
28 new ScriptedSyntheticChildren(options, data, "")));
29}
30
32 uint32_t options) {
33 LLDB_INSTRUMENT_VA(data, options);
34
35 if (!data || data[0] == 0)
36 return SBTypeSynthetic();
38 new ScriptedSyntheticChildren(options, "", data)));
39}
40
42 : m_opaque_sp(rhs.m_opaque_sp) {
43 LLDB_INSTRUMENT_VA(this, rhs);
44}
45
47
50 return this->operator bool();
51}
52SBTypeSynthetic::operator bool() const {
54
55 return m_opaque_sp.get() != nullptr;
56}
57
60
61 if (!IsValid())
62 return false;
63 const char *code = m_opaque_sp->GetPythonCode();
64 return (code && *code);
65}
66
69
70 if (!IsValid())
71 return false;
72 return !IsClassCode();
73}
74
77
78 if (!IsValid())
79 return nullptr;
80 if (IsClassCode())
81 return ConstString(m_opaque_sp->GetPythonCode()).GetCString();
82
83 return ConstString(m_opaque_sp->GetPythonClassName()).GetCString();
84}
85
86void SBTypeSynthetic::SetClassName(const char *data) {
87 LLDB_INSTRUMENT_VA(this, data);
88
89 if (IsValid() && data && *data)
90 m_opaque_sp->SetPythonClassName(data);
91}
92
93void SBTypeSynthetic::SetClassCode(const char *data) {
94 LLDB_INSTRUMENT_VA(this, data);
95
96 if (IsValid() && data && *data)
97 m_opaque_sp->SetPythonCode(data);
98}
99
101 LLDB_INSTRUMENT_VA(this);
102
103 if (!IsValid())
104 return lldb::eTypeOptionNone;
105 return m_opaque_sp->GetOptions();
106}
107
108void SBTypeSynthetic::SetOptions(uint32_t value) {
109 LLDB_INSTRUMENT_VA(this, value);
110
111 if (!CopyOnWrite_Impl())
112 return;
113 m_opaque_sp->SetOptions(value);
114}
115
117 lldb::DescriptionLevel description_level) {
118 LLDB_INSTRUMENT_VA(this, description, description_level);
119
120 if (m_opaque_sp) {
121 description.Printf("%s\n", m_opaque_sp->GetDescription().c_str());
122 return true;
123 }
124 return false;
125}
126
129 LLDB_INSTRUMENT_VA(this, rhs);
130
131 if (this != &rhs) {
133 }
134 return *this;
135}
136
138 LLDB_INSTRUMENT_VA(this, rhs);
139
140 if (!IsValid())
141 return !rhs.IsValid();
142 return m_opaque_sp == rhs.m_opaque_sp;
143}
144
146 LLDB_INSTRUMENT_VA(this, rhs);
147
148 if (!IsValid())
149 return !rhs.IsValid();
150
151 if (m_opaque_sp->IsScripted() != rhs.m_opaque_sp->IsScripted())
152 return false;
153
154 if (IsClassCode() != rhs.IsClassCode())
155 return false;
156
157 if (strcmp(GetData(), rhs.GetData()))
158 return false;
159
160 return GetOptions() == rhs.GetOptions();
161}
162
164 LLDB_INSTRUMENT_VA(this, rhs);
165
166 if (!IsValid())
167 return !rhs.IsValid();
168 return m_opaque_sp != rhs.m_opaque_sp;
169}
170
172 return m_opaque_sp;
173}
174
176 const lldb::ScriptedSyntheticChildrenSP &TypeSynthetic_impl_sp) {
177 m_opaque_sp = TypeSynthetic_impl_sp;
178}
179
181 const lldb::ScriptedSyntheticChildrenSP &TypeSynthetic_impl_sp)
182 : m_opaque_sp(TypeSynthetic_impl_sp) {}
183
185 if (!IsValid())
186 return false;
187 if (m_opaque_sp.use_count() == 1)
188 return true;
189
191 m_opaque_sp->GetOptions(), m_opaque_sp->GetPythonClassName(),
192 m_opaque_sp->GetPythonCode()));
193
194 SetSP(new_sp);
195
196 return true;
197}
#define LLDB_INSTRUMENT_VA(...)
bool operator==(lldb::SBTypeSynthetic &rhs)
lldb::SBTypeSynthetic & operator=(const lldb::SBTypeSynthetic &rhs)
static SBTypeSynthetic CreateWithScriptCode(const char *data, uint32_t options=0)
lldb::ScriptedSyntheticChildrenSP GetSP()
bool operator!=(lldb::SBTypeSynthetic &rhs)
void SetSP(const lldb::ScriptedSyntheticChildrenSP &typefilter_impl_sp)
bool GetDescription(lldb::SBStream &description, lldb::DescriptionLevel description_level)
void SetClassName(const char *data)
void SetClassCode(const char *data)
bool IsEqualTo(lldb::SBTypeSynthetic &rhs)
static SBTypeSynthetic CreateWithClassName(const char *data, uint32_t options=0)
lldb::ScriptedSyntheticChildrenSP m_opaque_sp
A uniqued constant string class.
Definition: ConstString.h:40
const char * GetCString() const
Get the string value as a C string.
Definition: ConstString.h:216
A class that represents a running process on the host machine.
Definition: SBAddress.h:15
DescriptionLevel
Description levels for "void GetDescription(Stream *, DescriptionLevel)" calls.
std::shared_ptr< lldb_private::ScriptedSyntheticChildren > ScriptedSyntheticChildrenSP
Definition: lldb-forward.h:469