mirror of https://github.com/mono/CppSharp.git
Browse Source
Fixes https://github.com/mono/CppSharp/issues/936. Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>pull/942/head
8 changed files with 56 additions and 9 deletions
@ -0,0 +1,47 @@
@@ -0,0 +1,47 @@
|
||||
using CppSharp.AST; |
||||
using CppSharp.AST.Extensions; |
||||
|
||||
namespace CppSharp.Passes |
||||
{ |
||||
public class MarkUsedClassInternalsPass : TranslationUnitPass |
||||
{ |
||||
public MarkUsedClassInternalsPass() |
||||
{ |
||||
VisitOptions.VisitClassBases = false; |
||||
VisitOptions.VisitClassMethods = false; |
||||
VisitOptions.VisitClassProperties = false; |
||||
VisitOptions.VisitEventParameters = false; |
||||
VisitOptions.VisitFunctionReturnType = false; |
||||
VisitOptions.VisitFunctionParameters = false; |
||||
VisitOptions.VisitNamespaceEnums = false; |
||||
VisitOptions.VisitNamespaceEvents = false; |
||||
VisitOptions.VisitNamespaceTemplates = false; |
||||
VisitOptions.VisitNamespaceVariables = false; |
||||
VisitOptions.VisitTemplateArguments = false; |
||||
} |
||||
|
||||
public override bool VisitFieldDecl(Field field) |
||||
{ |
||||
if (!base.VisitDeclaration(field)) |
||||
return false; |
||||
|
||||
Class @class; |
||||
if (field.Type.TryGetClass(out @class) && @class.Ignore) |
||||
{ |
||||
DeclarationContext declarationContext = @class; |
||||
do |
||||
{ |
||||
if (declarationContext.Ignore) |
||||
declarationContext.GenerationKind = GenerationKind.Internal; |
||||
declarationContext = declarationContext.Namespace; |
||||
} while (declarationContext != null); |
||||
|
||||
var specialization = @class as ClassTemplateSpecialization; |
||||
if (specialization?.TemplatedDecl.TemplatedClass.Ignore == true) |
||||
specialization.TemplatedDecl.TemplatedClass.GenerationKind = GenerationKind.Internal; |
||||
} |
||||
|
||||
return true; |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue