Skip to content

Commit 704001e

Browse files
committed
[lldb] Add SBType::IsAggregateType
Add `IsAggregateType` to the SB API. I'd like to use this from tests, and there are numerous other `Is<X>Type` predicates on `SBType`. Differential Revision: https://reviews.llvm.org/D121252
1 parent a12403c commit 704001e

File tree

5 files changed

+32
-0
lines changed

5 files changed

+32
-0
lines changed

lldb/bindings/interface/SBType.i

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -354,6 +354,18 @@ public:
354354
bool
355355
IsScopedEnumerationType ();
356356

357+
%feature("docstring",
358+
"Returns true if this type is an aggregate type.
359+
360+
Language-specific behaviour:
361+
362+
* C: Returns true for struct values, arrays, and vectors.
363+
* C++: Same a C. Also includes class instances.
364+
* Objective-C: Same as C. Also includes class instances.
365+
") IsAggregateType;
366+
bool
367+
IsAggregateType ();
368+
357369
%feature("docstring",
358370
"Returns a type that represents a pointer to this type.
359371

lldb/include/lldb/API/SBType.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,8 @@ class SBType {
133133

134134
bool IsScopedEnumerationType();
135135

136+
bool IsAggregateType();
137+
136138
lldb::SBType GetPointerType();
137139

138140
lldb::SBType GetPointeeType();

lldb/packages/Python/lldbsuite/test/lldbtest.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2541,6 +2541,8 @@ def DebugSBType(self, type):
25412541
err.write(type.GetName() + ":\n")
25422542
err.write('\t' + "ByteSize -> " +
25432543
str(type.GetByteSize()) + '\n')
2544+
err.write('\t' + "IsAggregateType -> " +
2545+
str(type.IsAggregateType()) + '\n')
25442546
err.write('\t' + "IsPointerType -> " +
25452547
str(type.IsPointerType()) + '\n')
25462548
err.write('\t' + "IsReferenceType -> " +

lldb/source/API/SBType.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,14 @@ bool SBType::IsScopedEnumerationType() {
273273
return m_opaque_sp->GetCompilerType(true).IsScopedEnumerationType();
274274
}
275275

276+
bool SBType::IsAggregateType() {
277+
LLDB_INSTRUMENT_VA(this);
278+
279+
if (!IsValid())
280+
return false;
281+
return m_opaque_sp->GetCompilerType(true).IsAggregateType();
282+
}
283+
276284
lldb::SBType SBType::GetFunctionReturnType() {
277285
LLDB_INSTRUMENT_VA(this);
278286

lldb/test/API/python_api/type/TestTypeList.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ def test(self):
6666
self.assertTrue(type)
6767
self.DebugSBType(type)
6868
self.assertFalse(type.IsAnonymousType(), "Task is not anonymous")
69+
self.assertTrue(type.IsAggregateType(), "Task is aggregate")
6970
for field in type.fields:
7071
if field.name == "type":
7172
for enum_member in field.type.enum_members:
@@ -75,10 +76,12 @@ def test(self):
7576
self.assertFalse(
7677
field.type.IsAnonymousType(),
7778
"my_type_is_nameless is not an anonymous type")
79+
self.assertTrue(field.type.IsAggregateType())
7880
elif field.name == "my_type_is_named":
7981
self.assertFalse(
8082
field.type.IsAnonymousType(),
8183
"my_type_is_named has a named type")
84+
self.assertTrue(field.type.IsAggregateType())
8285
elif field.name == None:
8386
self.assertTrue(
8487
field.type.IsAnonymousType(),
@@ -111,6 +114,7 @@ def test(self):
111114
task_head_type = task_head.GetType()
112115
self.DebugSBType(task_head_type)
113116
self.assertTrue(task_head_type.IsPointerType())
117+
self.assertFalse(task_head_type.IsAggregateType())
114118

115119
self.assertEqual(task_head_type, task_pointer_type)
116120

@@ -125,6 +129,7 @@ def test(self):
125129
self.DebugSBValue(id)
126130
id_type = id.GetType()
127131
self.DebugSBType(id_type)
132+
self.assertFalse(id_type.IsAggregateType())
128133

129134
# SBType.GetBasicType() takes an enum 'BasicType'
130135
# (lldb-enumerations.h).
@@ -138,6 +143,7 @@ def test(self):
138143
myint_arr_type = myint_arr.GetType()
139144
self.DebugSBType(myint_arr_type)
140145
self.assertTrue(myint_arr_type.IsArrayType())
146+
self.assertTrue(myint_arr_type.IsAggregateType())
141147
myint_arr_element_type = myint_arr_type.GetArrayElementType()
142148
self.DebugSBType(myint_arr_element_type)
143149
myint_type = target.FindFirstType('myint')
@@ -150,11 +156,13 @@ def test(self):
150156
self.assertTrue(enum_type)
151157
self.DebugSBType(enum_type)
152158
self.assertFalse(enum_type.IsScopedEnumerationType())
159+
self.assertFalse(enum_type.IsAggregateType())
153160

154161
scoped_enum_type = target.FindFirstType('ScopedEnumType')
155162
self.assertTrue(scoped_enum_type)
156163
self.DebugSBType(scoped_enum_type)
157164
self.assertTrue(scoped_enum_type.IsScopedEnumerationType())
165+
self.assertFalse(scoped_enum_type.IsAggregateType())
158166
int_scoped_enum_type = scoped_enum_type.GetEnumerationIntegerType()
159167
self.assertTrue(int_scoped_enum_type)
160168
self.DebugSBType(int_scoped_enum_type)

0 commit comments

Comments
 (0)