diff --git a/src/AST/Class.cs b/src/AST/Class.cs index cce81845..7ee22453 100644 --- a/src/AST/Class.cs +++ b/src/AST/Class.cs @@ -15,8 +15,6 @@ namespace CppSharp.AST // A C++ access specifier declaration. public class AccessSpecifierDecl : Declaration { - public AccessSpecifier Access; - public override T Visit(IDeclVisitor visitor) { throw new NotImplementedException(); diff --git a/src/AST/Declaration.cs b/src/AST/Declaration.cs index edb3864c..38fc0e54 100644 --- a/src/AST/Declaration.cs +++ b/src/AST/Declaration.cs @@ -169,6 +169,8 @@ namespace CppSharp.AST } } + public AccessSpecifier Access { get; set; } + // Contains debug text about the declaration. public string DebugText; diff --git a/src/AST/Field.cs b/src/AST/Field.cs index 9d24a8c2..82bd5634 100644 --- a/src/AST/Field.cs +++ b/src/AST/Field.cs @@ -8,7 +8,6 @@ namespace CppSharp.AST public Type Type { get { return QualifiedType.Type; } } public QualifiedType QualifiedType { get; set; } - public AccessSpecifier Access { get; set; } public uint Offset { get; set; } public Class Class { get; set; } diff --git a/src/AST/Method.cs b/src/AST/Method.cs index 5627b50e..d8cfdabe 100644 --- a/src/AST/Method.cs +++ b/src/AST/Method.cs @@ -74,7 +74,6 @@ namespace CppSharp.AST Access = AccessSpecifier.Public; } - public AccessSpecifier Access { get; set; } public AccessSpecifierDecl AccessDecl { get; set; } public bool IsVirtual { get; set; } diff --git a/src/AST/Variable.cs b/src/AST/Variable.cs index 4002b68f..40050023 100644 --- a/src/AST/Variable.cs +++ b/src/AST/Variable.cs @@ -8,8 +8,6 @@ namespace CppSharp.AST return visitor.VisitVariableDecl(this); } - public AccessSpecifier Access { get; set; } - public Type Type { get { return QualifiedType.Type; } } public QualifiedType QualifiedType { get; set; } diff --git a/src/Generator/Passes/CheckIgnoredDecls.cs b/src/Generator/Passes/CheckIgnoredDecls.cs index c91da133..b715faba 100644 --- a/src/Generator/Passes/CheckIgnoredDecls.cs +++ b/src/Generator/Passes/CheckIgnoredDecls.cs @@ -24,6 +24,16 @@ namespace CppSharp.Passes return true; } + public override bool VisitClassDecl(Class @class) + { + if (@class.Access == AccessSpecifier.Private) + { + @class.ExplicityIgnored = true; + return false; + } + return base.VisitClassDecl(@class); + } + public override bool VisitFieldDecl(Field field) { if (!VisitDeclaration(field)) @@ -86,7 +96,7 @@ namespace CppSharp.Passes if (!VisitDeclaration(method)) return false; - if (method.Access != AccessSpecifier.Public) + if (method.Access == AccessSpecifier.Private) { method.ExplicityIgnored = true; return false; diff --git a/src/Parser/Parser.cpp b/src/Parser/Parser.cpp index 1917d65e..b1ed2725 100644 --- a/src/Parser/Parser.cpp +++ b/src/Parser/Parser.cpp @@ -2086,6 +2086,7 @@ CppSharp::AST::Declaration^ Parser::WalkDeclaration(clang::Decl* D, if (const ValueDecl *VD = dyn_cast_or_null(D)) Decl->IsDependent = VD->getType()->isDependentType(); + Decl->Access = ConvertToAccess(D->getAccess()); } return Decl; diff --git a/tests/Basic/Basic.h b/tests/Basic/Basic.h index 109ab84a..bf48e043 100644 --- a/tests/Basic/Basic.h +++ b/tests/Basic/Basic.h @@ -49,12 +49,17 @@ enum Enum class DLL_API Hello { - union { + union NestedPrivate { int i; - float b; + float f; }; public: + union NestedPublic { + int j; + float g; + }; + Hello (); void PrintHello(const char* s);