@@ -153,10 +153,8 @@ void Parser::ReadClassLayout(Class* Class, const clang::RecordDecl* RD,
153
153
154
154
// Dump fields.
155
155
uint64_t FieldNo = 0;
156
- for (RecordDecl::field_iterator I = RD->field_begin(),
157
- E = RD->field_end(); I != E; ++I, ++FieldNo) {
158
- auto Field = *I;
159
- uint64_t LocalFieldOffsetInBits = Layout.getFieldOffset(FieldNo);
156
+ for (const clang::FieldDecl* Field : RD->fields()) {
157
+ uint64_t LocalFieldOffsetInBits = Layout.getFieldOffset(FieldNo++);
160
158
CharUnits FieldOffset =
161
159
Offset + c->getASTContext().toCharUnitsFromBits(LocalFieldOffsetInBits);
162
160
@@ -966,7 +964,7 @@ void Parser::WalkRecord(const clang::RecordDecl* Record, Class* RC)
966
964
{
967
965
auto MD = cast<CXXMethodDecl>(D);
968
966
if (IsSupported(MD))
969
- WalkMethodCXX (MD);
967
+ WalkDeclaration (MD);
970
968
break;
971
969
}
972
970
}
@@ -975,19 +973,14 @@ void Parser::WalkRecord(const clang::RecordDecl* Record, Class* RC)
975
973
return;
976
974
}
977
975
976
+ if (opts->skipPrivateDeclarations &&
977
+ Record->getAccess() == clang::AccessSpecifier::AS_private)
978
+ return;
979
+
978
980
for (auto D : Record->decls())
979
981
{
980
982
switch (D->getKind())
981
983
{
982
- case Decl::CXXConstructor:
983
- case Decl::CXXDestructor:
984
- case Decl::CXXConversion:
985
- case Decl::CXXMethod:
986
- {
987
- auto MD = cast<CXXMethodDecl>(D);
988
- WalkMethodCXX(MD);
989
- break;
990
- }
991
984
case Decl::AccessSpec:
992
985
{
993
986
AccessSpecDecl* AS = cast<AccessSpecDecl>(D);
@@ -1514,6 +1507,10 @@ TypeAliasTemplate* Parser::WalkTypeAliasTemplate(
1514
1507
1515
1508
FunctionTemplate* Parser::WalkFunctionTemplate(const clang::FunctionTemplateDecl* TD)
1516
1509
{
1510
+ if (opts->skipPrivateDeclarations &&
1511
+ TD->getAccess() == clang::AccessSpecifier::AS_private)
1512
+ return nullptr;
1513
+
1517
1514
using namespace clang;
1518
1515
1519
1516
auto NS = GetNamespace(TD);
@@ -1729,6 +1726,11 @@ static CXXOperatorKind GetOperatorKindFromDecl(clang::DeclarationName Name)
1729
1726
1730
1727
Method* Parser::WalkMethodCXX(const clang::CXXMethodDecl* MD)
1731
1728
{
1729
+ if (opts->skipPrivateDeclarations &&
1730
+ MD->getAccess() == clang::AccessSpecifier::AS_private &&
1731
+ !MD->isVirtual())
1732
+ return nullptr;
1733
+
1732
1734
using namespace clang;
1733
1735
1734
1736
// We could be in a redeclaration, so process the primary context.
@@ -3930,6 +3932,8 @@ Declaration* Parser::WalkDeclaration(const clang::Decl* D)
3930
3932
{
3931
3933
auto MD = cast<CXXMethodDecl>(D);
3932
3934
Decl = WalkMethodCXX(MD);
3935
+ if (Decl == nullptr)
3936
+ return Decl;
3933
3937
3934
3938
auto NS = GetNamespace(MD);
3935
3939
Decl->_namespace = NS;
0 commit comments