Skip to content

Commit bbb8895

Browse files
Vipul-Cariappaaaronj0
authored andcommitted
extracted to GetStaticDatamembers
1 parent 3f22184 commit bbb8895

File tree

3 files changed

+21
-11
lines changed

3 files changed

+21
-11
lines changed

include/clang/Interpreter/CppInterOp.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -424,11 +424,13 @@ namespace Cpp {
424424
/// Checks if the provided parameter is a 'Virtual' method.
425425
CPPINTEROP_API bool IsVirtualMethod(TCppFunction_t method);
426426

427-
/// Gets all the Fields/Data Members of a Class. For now, it
428-
/// only gets non-static data members but in a future update,
429-
/// it may support getting static data members as well.
427+
/// Gets all the Fields/Data Members of a Class
430428
CPPINTEROP_API std::vector<TCppScope_t> GetDatamembers(TCppScope_t scope);
431429

430+
/// Gets all the Static Fields/Data Members of a Class
431+
CPPINTEROP_API std::vector<TCppScope_t>
432+
GetStaticDatamembers(TCppScope_t scope);
433+
432434
/// This is a Lookup function to be used specifically for data members.
433435
CPPINTEROP_API TCppScope_t LookupDatamember(const std::string& name,
434436
TCppScope_t parent);

lib/Interpreter/CppInterOp.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1155,15 +1155,18 @@ namespace Cpp {
11551155
stack_begin.back()++;
11561156
}
11571157

1158-
// static field member
1159-
GetClassDecls<VarDecl>(scope, datamembers);
1160-
11611158
return datamembers;
11621159
}
11631160

11641161
return {};
11651162
}
11661163

1164+
std::vector<TCppScope_t> GetStaticDatamembers(TCppScope_t scope) {
1165+
std::vector<TCppScope_t> datamembers;
1166+
GetClassDecls<VarDecl>(scope, datamembers);
1167+
return datamembers;
1168+
}
1169+
11671170
TCppScope_t LookupDatamember(const std::string& name, TCppScope_t parent) {
11681171
clang::DeclContext *Within = 0;
11691172
if (parent) {

unittests/CppInterOp/VariableReflectionTest.cpp

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,17 +31,22 @@ TEST(VariableReflectionTest, GetDatamembers) {
3131
GetAllTopLevelDecls(code, Decls);
3232
auto datamembers = Cpp::GetDatamembers(Decls[0]);
3333
auto datamembers1 = Cpp::GetDatamembers(Decls[1]);
34+
auto static_datamembers = Cpp::GetStaticDatamembers(Decls[0]);
35+
auto static_datamembers1 = Cpp::GetStaticDatamembers(Decls[1]);
3436

3537
// non static field first
3638
EXPECT_EQ(Cpp::GetQualifiedName(datamembers[0]), "C::a");
3739
EXPECT_EQ(Cpp::GetQualifiedName(datamembers[1]), "C::c");
3840
EXPECT_EQ(Cpp::GetQualifiedName(datamembers[2]), "C::e");
39-
// static fields
40-
EXPECT_EQ(Cpp::GetQualifiedName(datamembers[3]), "C::b");
41-
EXPECT_EQ(Cpp::GetQualifiedName(datamembers[4]), "C::d");
42-
EXPECT_EQ(Cpp::GetQualifiedName(datamembers[5]), "C::f");
43-
EXPECT_EQ(datamembers.size(), 6);
41+
EXPECT_EQ(datamembers.size(), 3);
4442
EXPECT_EQ(datamembers1.size(), 0);
43+
44+
// static fields
45+
EXPECT_EQ(Cpp::GetQualifiedName(static_datamembers[0]), "C::b");
46+
EXPECT_EQ(Cpp::GetQualifiedName(static_datamembers[1]), "C::d");
47+
EXPECT_EQ(Cpp::GetQualifiedName(static_datamembers[2]), "C::f");
48+
EXPECT_EQ(static_datamembers.size(), 3);
49+
EXPECT_EQ(static_datamembers1.size(), 0);
4550
}
4651

4752
#define CODE \

0 commit comments

Comments
 (0)