Skip to content

Commit 85b98c7

Browse files
committed
Make GetDataMember use an out param
1 parent 12e6e69 commit 85b98c7

File tree

3 files changed

+18
-15
lines changed

3 files changed

+18
-15
lines changed

include/clang/Interpreter/CppInterOp.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -425,7 +425,8 @@ namespace Cpp {
425425
CPPINTEROP_API bool IsVirtualMethod(TCppFunction_t method);
426426

427427
/// Gets all the Fields/Data Members of a Class
428-
CPPINTEROP_API std::vector<TCppScope_t> GetDatamembers(TCppScope_t scope);
428+
CPPINTEROP_API void GetDatamembers(TCppScope_t scope,
429+
std::vector<TCppScope_t>& datamembers);
429430

430431
/// Gets all the Static Fields/Data Members of a Class
431432
///\param[in] scope - class

lib/Interpreter/CppInterOp.cpp

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1122,12 +1122,11 @@ namespace Cpp {
11221122
return false;
11231123
}
11241124

1125-
std::vector<TCppScope_t> GetDatamembers(TCppScope_t scope)
1126-
{
1125+
void GetDatamembers(TCppScope_t scope,
1126+
std::vector<TCppScope_t>& datamembers) {
11271127
auto *D = (Decl *) scope;
11281128

1129-
if (auto *CXXRD = llvm::dyn_cast_or_null<CXXRecordDecl>(D)) {
1130-
std::vector<TCppScope_t> datamembers;
1129+
if (auto* CXXRD = llvm::dyn_cast_or_null<CXXRecordDecl>(D)) {
11311130
llvm::SmallVector<RecordDecl::field_iterator, 2> stack_begin;
11321131
llvm::SmallVector<RecordDecl::field_iterator, 2> stack_end;
11331132
stack_begin.push_back(CXXRD->field_begin());
@@ -1154,11 +1153,7 @@ namespace Cpp {
11541153
datamembers.push_back((TCppScope_t)D);
11551154
stack_begin.back()++;
11561155
}
1157-
1158-
return datamembers;
11591156
}
1160-
1161-
return {};
11621157
}
11631158

11641159
void GetStaticDatamembers(TCppScope_t scope,

unittests/CppInterOp/VariableReflectionTest.cpp

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,11 @@ TEST(VariableReflectionTest, GetDatamembers) {
2828
void sum(int,int);
2929
)";
3030

31+
std::vector<Cpp::TCppScope_t> datamembers;
32+
std::vector<Cpp::TCppScope_t> datamembers1;
3133
GetAllTopLevelDecls(code, Decls);
32-
auto datamembers = Cpp::GetDatamembers(Decls[0]);
33-
auto datamembers1 = Cpp::GetDatamembers(Decls[1]);
34+
Cpp::GetDatamembers(Decls[0], datamembers);
35+
Cpp::GetDatamembers(Decls[1], datamembers1);
3436

3537
// non static field
3638
EXPECT_EQ(Cpp::GetQualifiedName(datamembers[0]), "C::a");
@@ -97,9 +99,13 @@ TEST(VariableReflectionTest, DatamembersWithAnonymousStructOrUnion) {
9799
#undef Stringify
98100
#undef CODE
99101

100-
auto datamembers_klass1 = Cpp::GetDatamembers(Decls[0]);
101-
auto datamembers_klass2 = Cpp::GetDatamembers(Decls[2]);
102-
auto datamembers_klass3 = Cpp::GetDatamembers(Decls[4]);
102+
std::vector<Cpp::TCppScope_t> datamembers_klass1;
103+
std::vector<Cpp::TCppScope_t> datamembers_klass2;
104+
std::vector<Cpp::TCppScope_t> datamembers_klass3;
105+
106+
Cpp::GetDatamembers(Decls[0], datamembers_klass1);
107+
Cpp::GetDatamembers(Decls[2], datamembers_klass2);
108+
Cpp::GetDatamembers(Decls[4], datamembers_klass3);
103109

104110
EXPECT_EQ(datamembers_klass1.size(), 3);
105111
EXPECT_EQ(datamembers_klass2.size(), 3);
@@ -203,7 +209,8 @@ TEST(VariableReflectionTest, GetVariableOffset) {
203209
#undef Stringify
204210
#undef CODE
205211

206-
auto datamembers = Cpp::GetDatamembers(Decls[2]);
212+
std::vector<Cpp::TCppScope_t> datamembers;
213+
Cpp::GetDatamembers(Decls[2], datamembers);
207214

208215
EXPECT_TRUE((bool) Cpp::GetVariableOffset(Decls[0])); // a
209216
EXPECT_TRUE((bool) Cpp::GetVariableOffset(Decls[1])); // N

0 commit comments

Comments
 (0)