Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion include/clang/Interpreter/CppInterOp.h
Original file line number Diff line number Diff line change
Expand Up @@ -425,7 +425,8 @@ namespace Cpp {
CPPINTEROP_API bool IsVirtualMethod(TCppFunction_t method);

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

/// Gets all the Static Fields/Data Members of a Class
///\param[in] scope - class
Expand Down
11 changes: 3 additions & 8 deletions lib/Interpreter/CppInterOp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1122,12 +1122,11 @@ namespace Cpp {
return false;
}

std::vector<TCppScope_t> GetDatamembers(TCppScope_t scope)
{
void GetDatamembers(TCppScope_t scope,
std::vector<TCppScope_t>& datamembers) {
auto *D = (Decl *) scope;

if (auto *CXXRD = llvm::dyn_cast_or_null<CXXRecordDecl>(D)) {
std::vector<TCppScope_t> datamembers;
if (auto* CXXRD = llvm::dyn_cast_or_null<CXXRecordDecl>(D)) {
llvm::SmallVector<RecordDecl::field_iterator, 2> stack_begin;
llvm::SmallVector<RecordDecl::field_iterator, 2> stack_end;
stack_begin.push_back(CXXRD->field_begin());
Expand All @@ -1154,11 +1153,7 @@ namespace Cpp {
datamembers.push_back((TCppScope_t)D);
stack_begin.back()++;
}

return datamembers;
}

return {};
}

void GetStaticDatamembers(TCppScope_t scope,
Expand Down
19 changes: 13 additions & 6 deletions unittests/CppInterOp/VariableReflectionTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,11 @@ TEST(VariableReflectionTest, GetDatamembers) {
void sum(int,int);
)";

std::vector<Cpp::TCppScope_t> datamembers;
std::vector<Cpp::TCppScope_t> datamembers1;
GetAllTopLevelDecls(code, Decls);
auto datamembers = Cpp::GetDatamembers(Decls[0]);
auto datamembers1 = Cpp::GetDatamembers(Decls[1]);
Cpp::GetDatamembers(Decls[0], datamembers);
Cpp::GetDatamembers(Decls[1], datamembers1);

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

auto datamembers_klass1 = Cpp::GetDatamembers(Decls[0]);
auto datamembers_klass2 = Cpp::GetDatamembers(Decls[2]);
auto datamembers_klass3 = Cpp::GetDatamembers(Decls[4]);
std::vector<Cpp::TCppScope_t> datamembers_klass1;
std::vector<Cpp::TCppScope_t> datamembers_klass2;
std::vector<Cpp::TCppScope_t> datamembers_klass3;

Cpp::GetDatamembers(Decls[0], datamembers_klass1);
Cpp::GetDatamembers(Decls[2], datamembers_klass2);
Cpp::GetDatamembers(Decls[4], datamembers_klass3);

EXPECT_EQ(datamembers_klass1.size(), 3);
EXPECT_EQ(datamembers_klass2.size(), 3);
Expand Down Expand Up @@ -203,7 +209,8 @@ TEST(VariableReflectionTest, GetVariableOffset) {
#undef Stringify
#undef CODE

auto datamembers = Cpp::GetDatamembers(Decls[2]);
std::vector<Cpp::TCppScope_t> datamembers;
Cpp::GetDatamembers(Decls[2], datamembers);

EXPECT_TRUE((bool) Cpp::GetVariableOffset(Decls[0])); // a
EXPECT_TRUE((bool) Cpp::GetVariableOffset(Decls[1])); // N
Expand Down
Loading